【发布时间】:2012-07-19 04:34:41
【问题描述】:
我有一个带有多个模板参数的模板。
template<typename Appl, typename StoredData>
class Box {
};
参数的值是互斥的: 即对于 Appl 的每个值,StoredData 只允许一组特定的类型。
例如:Appl 是 List、StoredData - double、char Appl 是树,StoredData - int
有没有办法在编译时强制执行这个限制? 所以,
Box<List, double> - compiles
Box<List, int> - fails
Box<Tree, int> - compiles
【问题讨论】:
-
只取
Appl类型并使用部分特化进行自定义映射。 -
Boost.MPL + 静态断言会很好。
-
或者只是将
StoredData类型设为Appl类型的内部typedef 并执行typedef typename Apply::stored_data_type store_type;。如果你愿意,我可以稍后为这两个选项写一个答案。