1

我有一个纯虚拟类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_它随处可见,我不需要它!我该如何解决这个问题?

4

1 回答 1

2

通过不这样做。只要有

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

并与它一起使用

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

拥有函子而不是函数的原因之一是它们能够通过操作携带和公开状态,您的方法会为了简明扼要地获得 2 个括号而将其丢弃。

于 2012-07-26T23:39:40.283 回答