我有一个代码如下,如果客户端代码与任何特化不匹配,我想抛出错误。但静态断言并没有帮助解决这个问题。请建议如何实现它。
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;
};
double 类型的特化。
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);
最佳答案
你可以做到
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
}
关于c++ - 限制基本模板实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33611526/