C++ 用非限定名称引用类函数
假设我们有这样一个类函数:C++ 用非限定名称引用类函数,c++,C++,假设我们有这样一个类函数: 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(); } 使用似乎不适用于将类成员导入全局范围,并且如果bar成为全局函数,它将无法访问私有数据。是
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();
}
使用似乎不适用于将类成员导入全局范围,并且如果bar成为全局函数,它将无法访问私有数据。是否有一种方法可以通过非限定名称在全局范围内访问bar?您必须在某个地方编写foo::bar,但可以将其隐藏在函数中
int bar()
{
return foo::bar();
}
int bar()
{ return foo::bar(); }
int main(int argc, char** argv) {
// Want to write bar() instead of foo::bar()
bar();
}
考虑foo out中的静态内容,因为它无论如何都不属于类。类和命名空间之间唯一的功能区别是可以实例化类。因为在使用静态成员函数时,您显然不需要它,所以不妨将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使用
调用静态成员函数的唯一方法是使用类名foo::bar对其进行限定。您需要访问一个静态成员函数还是任何成员函数?您的重点似乎更倾向于避免限定,而不是根据您的需求选择静态、成员或独立的方法。具体来说,静态成员函数。也许我可以将其改为friend全局函数。我相信您会知道,您无法在静态方法中访问该类的非静态数据成员,因此为此类方法的访问规范和友好关系而烦恼很可能没有意义。当然,如果您有指向该类对象的指针,你只是没有一个隐式的this指针。当然,但是你的方法没有参数,你的示例代码也没有显示任何全局变量,因此你没有一个对象实例可在静态方法中使用。该场景不适用于你的示例代码。
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);
}