用非限定名称引用类函数
Referring to a class function by the unqualified name
假设我们有一个类函数,如下所示:
class foo {
// Private data needs to be accessed by bar
public:
static int bar();
};
int main(int argc, char** argv) {
// Want to write bar() instead of foo::bar()
bar();
}
using
似乎不适用于将类成员导入全局范围,如果bar
成为全局函数,它将无法访问私有数据。有没有一种方法可以通过非限定名称使bar
在全局范围内可访问?
int bar()
{
return foo::bar();
}
您必须在的某个地方编写foo::bar
,但可以将其隐藏在函数中。
int bar()
{ return foo::bar(); }
int main(int argc, char** argv) {
// Want to write bar() instead of foo::bar()
bar();
}
这就是friend
的作用。
class foo {
int i;
// Private data needs to be accessed by bar
public:
friend int bar(foo);
};
int bar(foo f) {
return f.i = 3;
}
int main(int argc, char** argv) {
foo g;
// Want to write bar() instead of foo::bar()
bar(g);
}
去掉foo
中的静态内容,因为它无论如何都不属于类。类和命名空间之间唯一的功能区别是可以实例化类。由于您显然不需要它(因为您使用的是静态成员函数),所以您不妨将foo
更改为以下内容:
namespace foo {
class fooData { // optional, if you must hide the private data
friend int bar();
// Private data needs to be accessed by bar
};
int bar();
};
using foo::bar;
正如其他人所说,存根全局函数。或者宏:
#define bar foo::bar
并没有像C#using
那样真正导入到命名空间中的方法。
相关文章:
- 启动类函数作为失去引用的线程
- 当有右值构造函数可用时,为什么从右值调用类引用构造函数重载?
- 如何在C++中引用类结构中的函数?
- 不能引用类继承默认构造函数
- Python在不引用类名的情况下调用类函数
- C++通过 const 引用传递时不调用派生类函数
- 通过引用常量函数调用另一个类的非常量函数
- 如何在map::find()函数中引用类元素?
- 如何指向引用类的函数
- 引用类的成员函数的正确方法是什么?
- 未定义的引用;类公共函数在链接时不可访问
- 用非限定名称引用类函数
- c++向类成员发送引用fstream函数问题
- C++让类函数传递对类本身的引用
- 派生类函数参数作为基类引用导致C2678
- 当我尝试编译时对类::函数的未定义引用
- 通过类函数返回引用,并在c++中返回整个对象
- 对Arduino C++中类函数的未定义引用
- 在C++中创建一个具有引用调用返回值的类函数
- C++对类函数的未定义引用