функторы и наследование объектов - PullRequest
2 голосов
/ 19 сентября 2011

Краткое описание: У меня есть базовый класс, который строит некоторые объекты данных. Затем у меня есть дочерний класс, который наследует все открытые методы и указатели на объекты из базового класса.

В этом дочернем классе я хочу создать функтор (как структуру) для использования в цикле 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_f.

Идеи

Ответы [ 2 ]

6 голосов
/ 19 сентября 2011

Вложенные классы не имеют видимости членов их включающего класса (они похожи на static вложенные классы в Java).

Если вы хотите, чтобы foo получил доступ к in_data, вам необходимо явно указать ссылку на него. Таким образом, в конструкторе foo он может принимать ссылку на DataSource или ссылку на Child (и передавать *this).

1 голос
/ 19 сентября 2011

Ваш foo не знает о DataSource.

учитывайте это

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

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

Вы должны создать foo, предоставив ему источник данных для ссылки.

...