仿函数和对象继承

时间:2011-09-19 07:07:28

标签: c++ stl compiler-errors functor

简要概述: 我有一个基类来构建一些数据对象。然后我有一个子类,它继承了所有公共方法和指向基类中对象的指针。

在那个子类中,我想构造一个在for_each循环中使用的仿函数(作为结构)。我的问题是,在仿函数运算符中,我在尝试访问对象时遇到错误。

缩写示例:

class Child  : public BaseClass {
  Child(DataSource& in_data): Base(in_data){};

  struct foo {
    double operator() (int x){  
        double y = in_data.some_function(x);
        // do stuff
    }            
  };
}
  

错误:无法访问in_data.some_function。

想法?

2 个答案:

答案 0 :(得分:6)

Nested classes 没有封闭类成员的可见性(它们与Java中的static嵌套类相似)。

如果您希望foo访问in_data,则需要明确提供参考。因此,在foo的构造函数中,要么引用DataSource,要么引用Child(并传递*this)。

答案 1 :(得分:1)

您的foo不了解DataSource

考虑这个

struct foo
{
   DataSource& ds;
   foo(DataSource& a) :ds(a) {}

   double operator() (int x)
   {
     double y = ds.in_data.some_function(x);
     .....
   }
};

你必须通过给它一个引用的数据来创建foo。