我的主要()看起来像这样:
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 ++中使用它的合法方法是什么?
答案 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;)或单例模式。