Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 限制基本模板实例化_C++_Templates - Fatal编程技术网

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
}