模板化类 - 不受支持的类强制编译错误

时间:2017-02-08 13:54:55

标签: c++ templates cross-platform

我正在使用只有标准库的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

由于

1 个答案:

答案 0 :(得分:0)

在提升一些问题后,我决定将其删除。 (由于某种原因,centos7上的错误,但它在centos6 / win / mac上工作) 我使用以下方法,声明:

template<bool> struct MyStaticAssert;
template<> struct MyStaticAssert<true> {};

并且在不需要的功能中:

foo()
{
    MyStaticAssert<false>()
}

开始喜欢模板:)