我有一个带有多个模板参数的模板。
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/