我正在使用只有标准库的C ++ 03(跨平台),并且我有一个模板化的类,我希望在编译时失败,以防给出非支持的类。 到目前为止,我生成了运行时错误:
template <class Key, class Val>
class MyClass: public other_class<Key, Val>
{
public:
template<class T1M, class T2M>
struct ThisGetter
{
static T1M Get()
{
throw(std::exception("Failed")); //Change this to compilation failure
}
};
template<class T2M>
struct ThisGetter<int, T2M>
{
static Key Get()
{
int temp = std::numeric_limits<int>::min();
return temp;
}
};
};
如果可能,我希望拥有以下内容:
MyClass<int, int> works; // compilation successful
MyClass<string, int> fails; // compilation failed
有可能吗?如果我理解正确,删除第一个ThisGetter
由于
答案 0 :(得分:0)
在提升一些问题后,我决定将其删除。 (由于某种原因,centos7上的错误,但它在centos6 / win / mac上工作) 我使用以下方法,声明:
template<bool> struct MyStaticAssert;
template<> struct MyStaticAssert<true> {};
并且在不需要的功能中:
foo()
{
MyStaticAssert<false>()
}
开始喜欢模板:)