相同的模板,不同的代码?

时间:2016-01-06 19:53:22

标签: c++ templates

通过更改传递的值,是否有任何方法可以使用相同的模板类型而具有不同的代码?即:

template <bool>
class container; 

container<true>生成的代码与container<false>不同?

如果没有替代品吗?

1 个答案:

答案 0 :(得分:8)

是。这称为模板专业化。您可以编写如下代码:

template <bool> class container {
    /* Implementation for true */
};

template <> class container<false> {
    /* Implementation for false */
};

现在,如果您实例化container<true>,它将选择最高版本,因为底部版本不适用。如果您实例化container<false>,那么将选择底部版本,因​​为两个版本都适用,但底部更专业。

这里的实现可能完全不同。没有要求他们有任何共同点。这通常用于实现编译时计算。查看模板元编程以获取更多信息。