什么:(成员方法名称)在c ++中做

时间:2012-03-14 20:19:00

标签: c++

我是c ++的首发,我正在尝试开发一个简单的OpenGL应用程序。看一下互联网上的一些代码,我发现了这个:

::glutDisplayFunc(myPixmap::drawCallback);

忽略函数本身,我只是想知道那行代码的作用。它叫这个功能吗?我知道这可能是一个愚蠢的问题,但我找不到答案

3 个答案:

答案 0 :(得分:5)

::是范围解析运算符。

如果在它之前出现容器(名称空间或类)名称,则会导致编译器仅在该容器内查找指定的标识符。这是从类外部引用类的静态成员的方法。

如果它首先出现,前面没有名称,则意味着查看全局命名空间。

您的示例代码似乎包含两种用法。该行代码调用::glutDisplayFunc。但是没有调用另一个函数myPixmap::drawCallback。它的地址会保存以供日后使用。

答案 1 :(得分:2)

是的,它会调用该函数。前导“::”只表示必须在全局命名空间中找到该函数。例如:

namespace X { 
    void whatever() {}
};

void whatever() {}

int main() { 
    whatever(); // calls the global function
    ::whatever(); // also calls global function
    X::whatever(); // calls the function in the namespace
    return 0;
}

虽然whatever(没有范围解析)在这种情况下调用全局函数 ,这取决于上下文 - 在不同的上下文中,它可以调用命名空间中的函数。使用前导::可确保只调用全局函数,而不管上下文如何调用另一个名称空间中的函数。

答案 2 :(得分:0)

glutDisplayFunc设置当前窗口的显示回调。当GLUT确定需要重新显示窗口的法线平面时,将调用窗口的显示回调。在回调之前,当前窗口设置为需要重新显示的窗口(如果没有注册覆盖显示回调),则使用的层设置为法线平面。调用显示回调时没有参数。

在你的情况下,myPixmap :: drawCallback很可能是一个静态方法函数,没有参数,