我有一个代码如下,如果客户端代码与任何特化都不匹配,我想抛出错误。但静态断言并没有帮助这个原因。请建议如何实现它。
struct storage_manager{
storage_impl<double> double_store;
storage_impl<std::string> string_store;
template<typename T>
bool try_getting(int key, T &value)
{
static_assert(false , "Compiler should not reach here");
return false;
}
storage_manager(){}
~storage_manager(){}
storage_manager(storage_manager const &) = delete;
};
双重类型的专业化。
template<>
inline bool storage_manager::try_getting<double>(int key, double &value)
{
return double_store.try_getting(key,value);
}
std::string
类型的专精。
template<>
inline bool storage_manager::try_getting<std::string>(int key, std::string &value)
{
return string_store.try_getting(key,value);
}
如果在请求不受支持的类型时,如何在编译时抛出错误。像...
storage_manager mgr;
int a;
std::cout<<mgr.try_getting(134,a);
答案 0 :(得分:4)
你可以做到
template<typename T>
bool try_getting(int key, T &value) = delete;
并仅实现所需的专业化。例如:
#include <iostream>
template<typename> void f() = delete;
template <> void f<int>(){std::cout << "ok\n";}
int main()
{
f<int>();
// f<double>(); // does not compile
}