有没有一种方法可以专门使用模板化函数来区分参数的类型是指针还是指针的类型?

Grouflon

让我们考虑那些模板化函数

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有一种方法可以通过数组类型专门化功能模板?

有没有一种方法可以通过检查函数来缩小类型?

有没有一种方法可以自动类型转换void指针?

有没有一种方法可以为模板函数参数类型定义类型?

有没有一种方法可以让函数在 C 中返回指针?

有没有一种方法可以通过使用参数来选择几行?

有没有一种方法可以使用对象的类型作为类型参数的参数?

有没有一种方法可以使构造函数接受两种可能的参数类型?

有没有一种方法可以强制用户明确指定模板参数类型?

GDB有没有一种方法可以在不忽略模板参数的情况下打印类型?

有没有一种方法可以将模板函数中允许的类型列入白名单?

有没有一种方法可以对抽象方法进行模板化,以便抽象方法的参数与实现子类的类型相同?

Rust:有没有一种方法可以在宏类型参数上调用静态函数?

有没有一种方法可以转换类型参数?

有没有一种方法来获取函数参数的类型?

有没有一种方法可以使函数返回类型名?

有没有一种方法可以使用Boost Test测试非类型模板?

有没有一种方法可以在python中使用类型提示为函数参数指定有效值的范围?

有没有一种方法可以通过函数调用的参数来定义数组?

有没有一种方法可以typedef函数来修改C中的参数?

有没有一种方法可以在C ++中使用类型文字?

C ++有没有一种方法可以对同一参数使用不同的类型来初始化类?

有没有一种方法可以在Rust中创建指向方法的函数指针?

有没有一种方法可以在C ++中定义MACRO以生成按输入类型区分的内容?

有没有一种方法可以在不创建变量的情况下调用需要指针的函数?

量角器,有没有一种方法可以使用参数来配置报告目录?

有没有一种方法可以对指针向量进行深层复制?

有没有一种方法可以在没有虚拟的情况下使用基类指针来调用派生类函数

有没有一种方法可以将模板化函数签名作为模板模板参数传递