模板参数互斥

Template Parameters Mutually Exclusive

本文关键字:参数      更新时间:2023-10-16

我有一个带有多个模板参数的模板。

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

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

例如:Appl是List,StoredData-double,charAppl是树,StoredData-int

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

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

有:

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,尝试更改某些类型,它将无法编译。