C ++父类的通用用法(引用或指针)

时间:2013-03-17 21:25:28

标签: c++ inheritance

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重建FunctionBase,或者有没有办法使用FunctionBase & }?

- 编辑 -

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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