我的main()看起来像这样:

   int main(int argc, char** argv)
    {
    // Initialize GLUT
    glutInit(&argc, argv);

    ...

    glutDisplayFunc(display);
    ...

    // Set robot's parameters
    Robot robot; // Initialize global object robot
    robot.setSize(50);
    robot.setColor('G');
    robot.setLocation(50,100);

    glutMainLoop();
    return EXIT_SUCCESS;
}


然后,我还有另一个功能,我想访问机器人的方法:

// This function is constantly "looped"
void display() {
    ...
    robot.draw();
    ...
}


用C ++合法的方式是什么?

最佳答案

对于任何有兴趣的人,问题都改变了,所以我的旧答案丢失了。

如果要求您的display函数具有特定的签名(void()),则可以使用std::bind,前提是您可以访问C ++ 11:

void display(Robot &robot){...}

//in main
Robot robot;
glutDisplayFunc(std::bind(std::ref(display), robot));


如果您没有C ++ 11,boost::bind也可以正常工作:

glutDisplayFunc(boost::bind(boost::ref(display), robot));


如果两者都不存在,则必须在全球范围内存储robot

关于c++ - C++如何从main()外部访问在main()中初始化的对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12850833/

10-12 00:20
查看更多