C ++如何从main()外部访问main()中初始化的对象?

时间:2012-10-12 01:02:40

标签: c++

我的主要()看起来像这样:

   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 ++中使用它的合法方法是什么?

2 个答案:

答案 0 :(得分:3)

对于任何有兴趣的人,问题都会改变,所以我的旧答案会被编辑遗失。

如果您的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

答案 1 :(得分:1)

由于过量显示回调不带参数,你必须使用全局变量(Robot * gRobot;)或单例模式。