0

私は静的関数と変数について多くのことを調べて読みました。静的関数などで非静的変数/関数を単純に呼び出すことはできないことを理解したので、私の質問は、この問題をどのように解決できるかです。 m GLFW key_callback を使用しています。

GLFW には次のようなものがあります。

static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
  if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
    glfwSetWindowShouldClose(window, GL_TRUE);
}

これを他のウィンドウ関連の呼び出しと同様に追加します。

glfwMakeContextCurrent(window);
glfwSetKeyCallback(window, window_key_callback);

しかし、次のように key_callback で「スペース」キーが押された場合に、別のクラス関数を呼び出せるようにしたいと考えています。

私が持っている.hファイルに

#include "A.h"

...

private: 
        A *anotherClass;

そしてコンストラクターにある.cppファイルで

anotherClass = new A();

そして残り

 static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
  if (key == GLFW_KEY_SPACE && action == GLFW_PRESS)
    antoherClass->draw();
}

この anotherClass は静的ではありません。スペースが押された場合に描画を開始したいだけです。

誰かがこれで私を助けることができますか?

4

3 に答える 3

2

グローバル変数を作成する必要がありantherClassます。これを回避する方法は他にありません。通常、コールバック関数は、ユーザーが提供したデータ ポインターを取得して、外部情報を渡すことができるようにする必要があります。ここに API の欠陥があるようです。

編集: glfwSetWindowUserPointerglfwGetWindowUserPointerを使用してこれを行うことができます。

于 2015-07-23T16:55:18.320 に答える