模板参数互斥

时间:2012-07-18 20:25:37

标签: c++ templates

我有一个包含多个模板参数的模板。

    template<typename Appl, typename StoredData>
    class Box {
    };

参数的值互斥: 即,对于Appl的每个值,StoredData只允许一组特定的类型。

Ex:Appl是List,StoredData - double,char Appl是Tree,StoredData - int

有没有办法在编译时强制执行此限制? 所以,

     Box<List, double> - compiles
     Box<List, int> - fails
     Box<Tree, int> - compiles

1 个答案:

答案 0 :(得分:4)

是的,有:

template<typename Appl, typename StoredData>
    class Box {
        static_assert(
            std::is_same<Appl, List>::value && std::is_same<StoredData, double>::value ||
            std::is_same<Appl, Tree>::value && std::is_same<StoredData, int>::value,
            "Bad parameters"
        );
    };

这是一个工作示例http://ideone.com/enECW,尝试更改某些类型,但无法编译。