c++ - 类型界面略有不同时模板的正确使用

标签 c++ templates

我将有一个类函数来对两种可能的参数类型进行几乎完全相同的操作,比如 foo(TypeA * t) 和 foo(TypeB * t)
有两种场景:1)整个函数是等价的,两种类型的接口(interface)完全一样,我想我可以用一个只是模板定义:

模板
无效 foo(T * t)

2) 接口(interface)会略有不同,在函数中我们应该使用TypeA中的t->x代替TypeB中的t->y,其余的功能应该是等价的。有没有编写两个函数或函数规范的好/干净的方法?

谢谢!

最佳答案

您可以使用 if constexpr 在 C++17 中,所以它会是这样的:

template<typename T>
void foo(T * t)
{
   if constexpr (std::is_same_v<std::remove_reference_t<T>, TypeA>)
      t->x();
   else
      t->y();
   // the rest of your function
}

或者,您可以简单地将不同的部分分解到您为其创建 2 个模板特化的另一个函数中。

编辑:在这种特殊情况下,它可能只适用于 std::is_same_v<T, TypeA>因为你不能有指向引用的指针。但一般最好加std::decay_t<T>std::remove_reference_t<T>就像我上面做的那样。

关于c++ - 类型界面略有不同时模板的正确使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61534185/

相关文章:

使用函数指针时c++模板编译错误

javascript - 从handlebars.js 中的部分访问父范围

c++ - 将 std::array 作为模板可变参数函数的参数传递

java - CPU缓存在C编程中无效?

c++ - 如何使用 jpeg_mem_dest 使用 libjpeg-turbo 压缩到内存

c++ - 如果我有很多具有相似前缀的字符串,是否有理由从该前缀创建一个子字符串?

c++ - 指针间接问题

C++ KOALA 图形库 - 了解访问数据结构的语法

c++ - 我可以指定模板参数应该是某个基类的子类吗?

c++ - 如果函数返回类型为 void,我应该如何调用可变参数包中的所有函数?