ベクトルに異なるパラメーターを持つ void 関数を格納する方法はありますか? パラメータの数は常に 1 つで、型のみが異なります。パラメーターの型は、 のような既定の型int
、自分のオブジェクトへのポインター、example*
またはその他の型にすることができます。
今のところ、パラメーターとして void ポインターを持つ関数のベクトルを使用しています。だから私はすべてを渡すことができます。しかし、すべての関数でバックキャストを取り除きたいです。
unordered_map<string, function<void(void*)> > List;
void Callback(string Name, function<void(void*)> Function)
{
List[Name].push_back(&Function);
}
Callback("event", [](void* x){
int value = *(int*)x;
cout << value << endl;
});
これは、私が何をしたいのかを説明するための例です。私が好むテンプレートの構文に注意してください。したがって、すべての関数をコンテナーに格納する必要があります。
vector<function<void(...)> > List; // need something other than a std vector
template <typename T>
void Callback(string Name, function<void(T)> Function)
{
List[Name].push_back(&Function);
}
Callback<int>([](int x){
cout << x << endl;
});
このアプリケーションは、リアルタイム レンダリング エンジンの重要な部分であるため、パフォーマンスに関連しています。
編集:パラメーターなしで関数を保存するという点を解決したので、これはもう質問の一部ではありません。質問をより明確かつ簡単にするものです。