0
我的問題是如何通過運行時已知的id
函數調用其中一個process
而不使用map?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;
}
你需要某種容器和類型的擦除來做到這一點。在你的例子中基於地圖的方法是合適的 –
爲此使用地圖有什麼問題? –
提供的解決方案對我來說很合適。如果你有足夠的空間來放置一些約束,你甚至可以使用'array'或'vector'來代替'map' – Arunmu