template <int T> struct int2type{};
template<int I>
void func( int2type<I> )
{
printf("int_val: %i\n", I);
}
int main(int argc, char *argv[])
{
func( int2type<10>() );
}
当然它打印10。
我对模板和类型推导如何工作有一些基本的想法,但我无法理解这段代码。 I
背后的魔力是什么?我们如何知道I
实例int2type
传递给func
?
答案 0 :(得分:1)
模板参数推导由C ++ 14标准的[temp.deduct.call]部分介绍。它太大而无法完全重现,但要点是编译器会将参数类型int2type<10>
与参数类型int2type<I>
进行比较,并尝试找到I
的值,那些相同的。
在[temp.deduct.type] / 9和/ 17中,指定参数class-template-name<i>
,其中i
是非类型模板参数,由参数{{1其中class-template-name<n>
是相同类型的参数。