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

Ara*_*ram 3 c++ templates

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

template <bool>
class container; 
Run Code Online (Sandbox Code Playgroud)

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

如果没有,有什么替代品吗?

tem*_*def 8

是.这称为模板专业化.你可以写这样的代码:

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

template <> class container<false> {
    /* Implementation for false */
};
Run Code Online (Sandbox Code Playgroud)

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

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