限制基本模板实例化
Restricting base template instantiation
本文关键字:实例化 更新时间:2023-10-16
我有一个代码如下,如果客户端代码与任何专业化都不匹配,我想抛出错误。但静态断言并不能帮助解决问题。请建议如何实现。
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);
}
CCD_ 1型的专门化。
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 << "okn";}
int main()
{
f<int>();
// f<double>(); // does not compile
}
在Coliru上直播
相关文章:
- 从C++实例化QML
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 如何创建一个空的全局类并在启动时实例化它
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 约束和显式模板实例化
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 对象实例化调用构造函数的次数太多
- 如何使用非默认构造函数实例化模板化类
- 静态数据成员模板专用化的实例化点在哪里
- 错误的cv::face FacemarkLBF实例化
- C++的解析器在可以区分比较和模板实例化之前会做什么?
- 为什么 gcc 和 clang 为函数模板的实例化生成不同的符号名称?
- 检查某些类型是否是模板类 std::optional 的实例化
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- 模板化类构造函数的模板实例化
- 在 c++ 中的模板实例化中使用带有构造函数的类作为类型参数
- 受约束的成员函数和显式模板实例化
- 对显式实例化的模板函数的未定义引用
- [temp.variadic]中关于包扩展实例化的措辞