让我们考虑那些模板化函数
template <typename T> void Func(T* p)
{
printf("pointer ");
Func(*p);
}
template <typename T> void Func(T)
{
printf("type");
}
我要编写它们,以便如果我给它提供了带有多个指针类型的参数,则将以该指针类型专用的函数递归地调用到不再有指针的位置,最后调用没有指针的函数。通常,如果我写
int a;
int* a2 = &a;
int** a3 = &a2;
int*** a4 = &a3;
Func(a4);
我要输出写
pointer pointer pointer type
不幸的是,如果我这样写,我得到的只是对非指针函数的调用。
有什么办法可以实现?
您只需要交换功能即可。在执行此操作template <typename T> void Func(T* p)
时,Func(*p);
所有编译器都知道is template <typename T> void Func(T* p)
。因此,您最终将递归调用同一函数,直到不再有指针时该函数出错。如果您使用
template <typename T> void Func(T)
{
printf("type");
}
template <typename T> void Func(T* p)
{
printf("pointer ");
Func(*p);
}
然后,当您调用时Func(*p);
,编译器就会知道template <typename T> void Func(T)
并会在您不再有指针给您时调用
pointer pointer pointer type
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句