我有一个包含多个模板参数的模板。
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
答案 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,尝试更改某些类型,但无法编译。