无法理解C ++ 11模板函数参数推导

时间:2017-02-23 01:28:29

标签: c++ c++11 templates overloading

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

1 个答案:

答案 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>是相同类型的参数。