外部库友元函数
External lib friend function
我正在使用curses.h
wgetch
函数,并且想调用例如wgetch(handle)
句柄是我类的私有成员。有没有办法在不定义我的类的新朋友函数(如下所示(或以某种方式使其成为方法的情况下做到这一点?
class foo {
WINDOW *handle;
public:
friend int wgetch(foo &t) { wgetch(t.handle); };
}
对私有数据的访问仅限于类实现和朋友(仅在必要时使用朋友(。所以,不,只要handle
是私有的,除了朋友和会员之外,没有其他选择可以访问它。
话虽如此,访问不一定必须在您尝试编写的函数中。如果有真正的理由不定义类的wgetch
成员,也许您可以定义一个返回handle
值的成员(只读公共访问(。不过,对于您类的用户来说,这似乎不太方便。
鉴于handle
是私有的,那么访问它的唯一途径是来自您类的成员及其朋友。
与仅具有成员函数相比,您拥有的代码(将foo
实例传递给友元函数(是复杂且非常规的:
class foo {
WINDOW *handle;
public:
int wgetch() { return ::wgetch(handle); }
};
看来您正在为诅咒WINDOW*
编写一个C++包装器,因此许多小型转发成员似乎是自然的方法。 请注意,我们需要范围运算符::
来消除我们打算调用的wgetch
的歧义。
您可能应该知道 NCurses 确实包含自己的C++包装器。 虽然这些没有记录,但我们看到NCursesWindow::getch()
的定义看起来与上面的方法完全一样(见cursesw.h
,第953行(:
int getch() { return ::wgetch(w); }
使用这些类可以节省大量工作。
相关文章:
- C++模板来检查友元函数的存在
- 如何使用单独文件中的派生类访问友元函数对象
- 模板化的类和友元函数
- 友元函数无法访问私有数据成员 (c++)
- 继承和友元函数,从基类访问受保护的成员
- 如何在友元函数中使用静态成员而不添加前缀 [类名]::
- 在将函数声明为友元时,尖括号的含义是什么?
- 在模板类之外定义友元函数的正确方法是什么?
- 2个模板化类的非模板友元函数未定义引用错误
- C++ 友元函数和私有构造函数
- 使第二个类的构造函数成为第一个类中的友元函数
- 未定义的类模板不会实例化以检查友元函数
- C++类中的友元函数有问题?
- 使用typedef'ed返回类型声明友元函数时出现编译器错误
- 模板类中的模板友元函数
- C++ 17 个友元函数声明和内联命名空间
- 将派生类的构造函数声明为父类的友元
- 友元函数需要一个帮助程序函数
- 在基/派生类的成员函数/友元函数中派生* 到 Base* 的转换
- 模板类的非模板函数友元