通过更改传递的值,是否有任何方法可以使用相同的模板类型而具有不同的代码?即:
template <bool>
class container;
让container<true>
生成的代码与container<false>
不同?
如果没有替代品吗?
答案 0 :(得分:8)
是。这称为模板专业化。您可以编写如下代码:
template <bool> class container {
/* Implementation for true */
};
template <> class container<false> {
/* Implementation for false */
};
现在,如果您实例化container<true>
,它将选择最高版本,因为底部版本不适用。如果您实例化container<false>
,那么将选择底部版本,因为两个版本都适用,但底部更专业。
这里的实现可能完全不同。没有要求他们有任何共同点。这通常用于实现编译时计算。查看模板元编程以获取更多信息。