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

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

参数的值是互斥的:
即,对于Appl的每个值,StoredData仅允许某些类型的集合。

例如:Appl是List,StoredData-double,char
应用是树,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,尝试更改某些类型,它将无法编译。

关于c++ - 模板参数互斥,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11549703/

10-10 10:14