c++ - 使用匿名类的公共(public)仿函数

标签 c++ function anonymous-class

我有一个纯虚类CF,它表示一维中的任何连续函数,它被定义为一个头文件

// tools.h
class CF
{
public:
    virtual double operator()(double x) const=0 ;
};

我打算做的是使用仿函数包装几个简单的函数,并将它们定义在 tools.h 中。如果我使用匿名类,例如:

// tools.h
class : public CF{
public:
    virtual double operator()(double x) const { return 0.0; }
} zero;

然后我遇到了麻烦,因为在包含 tools.h 的所有地方都重新定义了类。 gcc 提示:

// tools.h included in main.cpp, foo.cpp, and bar.cpp
foo.o:(.bss+0x0): multiple definition of `zero'
main.o:(.bss+0x0): first defined here
bar.o:(.bss+0x0): multiple definition of `zero'
main.o:(.bss+0x0): first defined here

我想我可以通过做类似的事情来解决这个问题:

// tools.h
class zero_: public CF{
public:
    virtual double operator()(double x) const { return 0.0; }
};

const static zero_ zero;

但我不喜欢它,因为 zero_ 随处可见,我不需要它!我该如何解决这个问题?

最佳答案

不做。刚好

struct zero : public CF {
  double operator()(double x) { return 0.; }
};

并与它一起使用

void fun(const CF& cf);
fun(zero());

在函数上使用仿函数的原因之一是它们能够通过操作携带和公开状态,您的方法会为了简洁获得 2 个括号而放弃它。

关于c++ - 使用匿名类的公共(public)仿函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11679550/

相关文章:

c++ - QTableWidget;使用 celllChanged 信号

reactjs - React Native 组件中的函数(函数与 const 函数)

swift - 为什么闭包不能关闭实例成员

Python修改不在函数内部的变量

javascript - JavaScript : SyntaxError: missing '}' after argument list

java - 这会导致内存泄漏吗?

java - 如何启动匿名线程类

c++ - getenv ("LINES") 在 Windows 上不起作用

c++ - 二维数组,一个已知,另一个未知

c++ - 代码下面是哪种排序技术?