-2
class FunctionBase {
  public:
    const double operator() (double a_) const = 0;
}

class AddN : public FunctionBase {
  public:
    AddN (int n_) : FunctionBase(), _n(n_) {}
    const double operator() (double a_) const { return (a_ + n); }
  private:
    int _n;
}

FunctionBase *由于编译器无法AddN从 a重建 a ,我是否必须用作占位符FunctionBase,还是有办法使用FunctionBase &

- 编辑 -

我有一个std::map<std::string, FunctionBase *>,我很好奇我是否能够使用引用而不是指针,所以我可以保证在使用它之前指针不为 NULL。我正在尝试使代码更耐错误。如果我将它切换到 a FunctionBase &,编译器会抱怨它无法实例化AddNFunctionBase &这是完全有意义的,但是我希望有一个我不知道的常见解决方法。

4

1 回答 1

1

std::function建议使用, 或 ,而不是定义类层次结构boost::function。这些可以保存一个可调用的并且可以存储在map值中,保证函数对象的生命周期:

std::map<std::string, std::function<double(double)>> functions;

这消除了使用类层次结构的需要,并且不需要添加到映射中的函数无论如何都是相关的,这样更灵活。

只是要指出,使用引用而不是指针并不能保证被引用的对象仍然存在。悬空引用是可能的,就像悬空指针一样。

于 2013-03-17T22:13:37.907 回答