0

我的 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++ 中这样做的合法方法是什么?

4

2 回答 2

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全球范围内存储更多。

于 2012-10-12T01:06:04.513 回答
1

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

于 2012-10-12T01:19:58.440 回答