我試圖做一個類將使用特定的數據類型,我想不支持數據類型時編譯時錯誤。模板功能專業化默認
我試圖專門化這樣的模板。
template<>
float Foo::get<float>(const std::string& key)
{
return std::stof(key);
}
而且把std::static_assert
在通用功能,因爲我只需要指定這些類型。
template<class T>
T Foo::get(const std::string&)
{
static_assert(false, "unsupported data type");
return T(0);
}
不幸的是我得到了編譯錯誤(靜態斷言失敗),即使我有這種類型的專門功能。
我找到了一種方法來處理特定的類型,但它看起來有點愚蠢,它不是通用的。
T Foo::get(const std::string&)
{
static_assert(
std::is_same<T,float>::value ||
std::is_same<T,double>::value ||
std::is_same<T,bool>::value ||
std::is_same<T,uint32_t>::value ||
std::is_same<T,int32_t>::value ||
std::is_same<T,std::string>::value,
"unsuported data type");
return T(0);
}
有花哨的技巧('always_false :: value')用於這一目的,但我認爲這是簡單的只是沒有定義主模板。 –
cpplearner