下面这个玩具程序将音乐类型转换为相应的颜色。它可以编译并正常执行——如预期般,
COUNTRY
的转换会失败,conversion()
函数会返回默认值WHITE
。但是,如果我删除模板参数<MUSIC, COLOR>
,模板参数推导就无法识别要使用的类型。我该怎么让推导工作呢?#include <map>
#include <iostream>
#include "boost/assign.hpp"
template<typename Key, typename T>
T convert(const Key &k, const T &d, const std::map<Key, T> &m) {
typename std::map<Key, T>::const_iterator it = m.find(k);
return it == m.end() ? d : it->second;
}
enum MUSIC { ROCK, RAP, EDM, COUNTRY };
enum COLOR { RED, BLUE, ORANGE, WHITE };
int main()
{
COLOR c = convert<MUSIC, COLOR>(COUNTRY, WHITE,
boost::assign::map_list_of (RAP, RED) (EDM, BLUE) (ROCK, RED));
std::cout << c << std::endl;
}