2

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

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

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

例如:Appl 是 List,StoredData - double,char Appl 是 Tree,StoredData - int

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

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

1 回答 1

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

于 2012-07-18T20:29:31.283 回答