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);
}