C++ 限制基本模板实例化
我有一个如下的代码,如果客户机代码与任何专门化都不匹配,我想在这里抛出错误。但静态断言无助于解决问题。请建议如何实现它C++ 限制基本模板实例化,c++,templates,C++,Templates,我有一个如下的代码,如果客户机代码与任何专门化都不匹配,我想在这里抛出错误。但静态断言无助于解决问题。请建议如何实现它 struct storage_manager{ storage_impl<double> double_store; storage_impl<std::string> string_store; template<typename T> bool try_getting(int key, T &va
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;
};
如何在请求不支持的类型时在编译时抛出错误。像
storage_manager mgr;
int a;
std::cout<<mgr.try_getting(134,a);
storage\u经理;
INTA;
你能做什么
template<typename T>
bool try_getting(int key, T &value) = delete;
模板
bool try_get(int key,T&value)=删除;
并且只实现所需的专门化。例如:
#include <iostream>
template<typename> void f() = delete;
template <> void f<int>(){std::cout << "ok\n";}
int main()
{
f<int>();
// f<double>(); // does not compile
}
#包括
模板void f()=删除;
模板void f(){std::cout
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
}