c++ - 对多个函数使用相同的模板

标签 c++ templates

如果需要使用同一个模板的多个函数,有没有办法声明和实现它们而无需每次都声明模板?

template <typename T>
T mymax (T a, T b);
template <typename T>
T mymin (T a, T b);
template <typename T>
T myfoo (T a, T b);

/********************************************/
template <typename T>
T mymax (T a, T b) {
    return (a > b ? a : b);
}

template <typename T>
T mymin (T a, T b) {
    return (a < b ? a : b);
}
template <typename T>
T myfoo (T a, T b) {
    return max(a,b)+min(a,b);
}

有没有办法写出template <typename T>这一行一段代码只用一次?看起来像的东西:

template <typename T> {
  T mymax (T a, T b);
  T mymin (T a, T b);
  T myfoo (T a, T b);
}

(此代码不合法​​,无法编译)

最佳答案

实现类似目标的唯一方法是滥用结构和静态函数。遗憾的是,您需要明确提及模板类型。

#include <iostream>

template<typename T>
struct my
{
  static T max(T a, T b) { return (a > b ? a : b); }
  static T min(T a, T b) { return (a < b ? a : b); }
  static T foo(T a, T b) { return max(a, b) + min(a, b); }
};

Live Demo.选择一个更好的类名。

我想不出任何“更好”的解决方案。只需写下 template<typename T> .你会习惯的。它是有目的的,它真的没有你想象的那么丑。

关于c++ - 对多个函数使用相同的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26895238/

相关文章:

c++ - 在模板构建器模式中排除重复的构造函数调用

C++:如何防止通过指向派生对象的基子对象的指针修改派生对象?

c++ - 如何执行 cppcheck 交叉翻译单元 (CTU) 静态分析?

c++ - 将 std::packaged_task 添加到现有线程?

c++ - 是否可以强制进行新的模板实例化?

node.js - 哪个Node.js模板引擎在服务器端使用时性能最好?

c++ - 是否存在 difftime 计算闰秒的实际系统?

c++ - 在 GDB 中查看 GCC 优化中间体?

c++ - 通过 const 引用传递模板

php - 动态设置 Kohana 模板名称