看不懂C++11模板函数参数推导
Can't understand C++11 template function parameter deduction
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
背后的魔力是什么?我们如何从 int2type
实例中知道 I
传递给 func
?
C++14 标准的 [temp.deduct.call] 部分介绍了模板参数推导。它太大而无法完整重现,但要点是编译器将参数类型 int2type<10>
与参数类型 int2type<I>
进行比较,并尝试为 I
找到一个值,使两者那些相同的。
在[temp.deduct.type]/9和/17中指定参数class-template-name<i>
,其中i
是一个非类型模板参数,由参数class-template-name<n>
其中 n
是相同类型的参数。
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
背后的魔力是什么?我们如何从 int2type
实例中知道 I
传递给 func
?
C++14 标准的 [temp.deduct.call] 部分介绍了模板参数推导。它太大而无法完整重现,但要点是编译器将参数类型 int2type<10>
与参数类型 int2type<I>
进行比较,并尝试为 I
找到一个值,使两者那些相同的。
在[temp.deduct.type]/9和/17中指定参数class-template-name<i>
,其中i
是一个非类型模板参数,由参数class-template-name<n>
其中 n
是相同类型的参数。