Доступ к открытой функции-члену класса C ++ из частного члена структуры данных

0

Это может быть тривиальный вопрос о семантике C++, я думаю, но я столкнулся с проблемами в Windows (VS2010) с этим. У меня есть класс следующим образом:

class A {
public:
   some_type some_func();
private: 
   struct impl;
   boost::scoped_ptr<impl> p_impl;
}

Я хотел бы получить доступ к функции some_func из функции, определенной в struct impl так:

struct A::impl {
   impl(..) {} //some constructor
   ...
   some_impl_type some_impl_func() {
     some_type x = some_func(); //-Need to access some_func() here like this
   }
};

Контекстное меню VS 2010 показывает ошибку, так что не надо было строить еще:

Error: A non-static member reference must relative to a specific object

Я был бы удивлен, если бы не было доступа к функции публичного участника. Любые идеи о том, как обойти это, оценивают. Благодарю!

Теги:
visual-studio-2010
access-specifier
pimpl-idiom

1 ответ

2
Лучший ответ

Вам нужен экземпляр A A::impl - это другая структура, чем A, поэтому неявный this не правильный экземпляр. Перейдите в конструктор:

struct A::impl {
   impl(A& parent) : parent_(parent) {} //some constructor
   ...
   some_impl_type some_impl_func() {
     some_type x = parent_.some_func(); //-Need to access some_func() here like this
   }

   A& parent_;
};
  • 0
    Спасибо, имеет смысл. Я полагал, что неявное это не должно работать, потому что вместо этого оно будет указывать на impl, но все еще кажется странным, что я должен это сделать, учитывая, что вызов поступает от объекта A, который, в свою очередь, вызывает функцию-член impl.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню