0
私の質問は、process
を実行時に関数として呼び出す方法です。id
マップを使用せずにですか?C++、テンプレートパラメータで関数を選択
#include <iostream>
#include <map>
enum id
{
id_1,
id_2,
id_3
};
template <id id_>
void process();
template<>
void process<id_1>()
{
std::cout << "1" << std::endl;
}
template<>
void process<id_2>()
{
std::cout << "2" << std::endl;
}
template<>
void process<id_3>()
{
std::cout << "3" << std::endl;
}
std::map<id, void(*)()> mapping =
{
{id_1, process<id_1>},
{id_2, process<id_2>},
{id_3, process<id_3>}
};
int main()
{
for (int i = 0; i < 10; ++i)
{
mapping[static_cast<id>(rand()%3)]();
}
return 0;
}
これを行うには、何らかの種類のコンテナが必要であり、消去をタイプする必要があります。あなたの例のマップベースのアプローチは適切です –
これにマップを使用すると何が問題になりますか? –
提供されている解決策は私には大丈夫です。もう少し制約を設ける余裕があれば、 'map'の代わりに' array'や 'vector'を使うこともできます。 – Arunmu