私は現在、C# から C++ に移行し、いくつかのゲーム エンジン コードを書き直しています。基本的に私がやりたいことは、入力レイヤーがタッチスクリーンから入力を取得し、コールバックを起動して、その入力をリッスンしている要素に通知することです。現在、 tr1/boost はfunctionとbindを使用してこれを非常に簡単にしているように見えますが、 void() であるコールバックを起動することは問題ありませんが、呼び出し時にこれらのコールバックにパラメーターを送信しようとしています (たとえば、列挙型) .
ここでの問題は、バインドを呼び出してパラメーターを挿入すると、プレースホルダーとして機能せず、渡される永続的な値として機能することです。たとえば、私のコードは次のとおりです。
含まれるクラス:
tr1::function<void (MenuActions action)> callback;
callback = tr1::bind(&MenuScene::handleInputCallback, this, MenuActions::neutral);
m_menuUILayer->registerCallback(callback);
関数を作成してバインドし、registerCallbackがこのコールバックをメンバー クラスに渡し、参照を格納するという意図があります。この部分は機能しますが、メンバークラスでコールバックを呼び出すことができますが、デフォルトのパラメーターは常に送信されます...
メンバー クラス:
if (m_callback)
{
m_callback(MenuActions::backgroundTouchDown);
}
したがって、ここでは、MenuActions::backgroundTouchDownがコールバックでメインを含むクラスに送信されるのではなく、デフォルトのMenuActions::neutralが引き続き使用されます。何かが足りないのか、それとも睡眠不足が原因で間違った方向に進んでいるのだろうか? みんなありがとう!