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())が必要な場合は、C ++ 11にアクセスできることを前提として、を使用できますstd::bind

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 displayコールバックはパラメーターを受け取らないため、グローバル変数(Robot * gRobot;)またはシングルトンパターンを使用する必要があります。

于 2012-10-12T01:19:58.440 に答える