次のおもちゃのプログラムは、音楽の種類を対応する色に変換します。正常にコンパイルおよび実行されます。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;
}