Учитывая, что handle
является личным, то единственный доступ к нему могут получить члены вашего класса и его друзья.
Код, который у вас есть (который передает экземпляр foo
функции друга)является сложным и нетрадиционным по сравнению с простым наличием функции-члена:
class foo {
WINDOW *handle;
public:
int wgetch() { return ::wgetch(handle); }
};
Похоже, что вы пишете оболочку C ++ для Curses WINDOW*
, поэтому многие маленькие элементы пересылки могут показаться естественным подходом,Обратите внимание, что нам нужен оператор области видимости ::
для устранения неоднозначности wgetch
, который мы намереваемся вызвать.
Вы, вероятно, должны знать, что NCurses действительно имеет свои собственные оболочки C ++.Несмотря на то, что они недокументированы, мы видим, что определение NCursesWindow::getch()
выглядит точно так же, как описанный выше метод (см. cursesw.h
, строка 953):
int getch() { return ::wgetch(w); }
Вы можете сэкономить много работы, используя этиклассы.