2016-01-06 119 views
3

有没有什么办法通过改变传递的值来让不同的代码拥有相同的模板类型?即:相同的模板,不同的代码?

template <bool> 
class container; 

,并具有container<true>产生不同的代码比container<false>

如果不是有没有其他办法呢?

+1

是的,这就是模板的目的。但是请注意,“容器”和“容器”不是同一类型。 – 5gon12eder

+1

我不太了解downvote。这个问题怎么没用? (研究的努力可能很低,但仍然比其他许多人出现在这里更有用)。 –

回答

8

是的。这叫做模板专业。你可以这样写代码:

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

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

现在,如果你实例container<true>,它会挑顶配版本,因为底部有一个是不适用的。如果您实例化container<false>,那么将选择底部的一个,因为两个版本都适用,但底部更专门化。

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

+0

“查找模板元编程的更多信息”太多了,这里 –

+0

@DieterLücking同意。我主要是在“实现编译时计算”的背景下提及它,因为我认为如果OP很好奇地了解如何使用模板特化可能是一个很好的起点。 – templatetypedef

相关问题