使用原始指针作为参数的函数模板推导
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用原始指针作为参数的函数模板推导相关的知识,希望对你有一定的参考价值。
案例A:
template<class T>
class A{
public:
A(T*)
{
cout<<"T*"<<endl;
}
template<class Y>
A(Y*)
{
cout<<"Y*"<<endl;
}
};
然后打电话:
A<int>p1(new int); //T*
A<int>p2(new double); //Y*
我能理解这个案子。
案例B:
template<class T>
class B{
public:
template<class Y>
B(Y*)
{
cout<<"Y*"<<endl;
}
};
然后打电话:
B<int>p3(new int); //Y*
B<int>p4(new double); //Y*
题:
我无法理解案例B并弄清楚为什么B<int>p3(new int);
称之为B(Y*)
?有人知道为什么吗?
答案
使用模板构造函数类型参数Y
的类型推导不依赖于您使用T
明确指定的类型参数B<int>
。
这意味着在以下情况下:
B<int>p3(new int)
Y
从int
类型的论证推断为int*
。
同样,在以下情况下:
B<int>p4(new double)
Y
从double
类型的论证推断为double*
。
类模板类型参数T
和构造函数模板类型参数Y
之间没有任何关联 - 它们的推导是分开执行的。
以上是关于使用原始指针作为参数的函数模板推导的主要内容,如果未能解决你的问题,请参考以下文章
从std :: function中推导返回和参数类型作为模板函数参数传递?
用函数指针包装 C++ 代码作为 cython 中的模板参数