非成员模板函数

Nonmember template function

本文关键字:函数 成员      更新时间:2023-10-16

我有一个模板化的类pair,我想在该类的外部编写一个show函数来执行一些奇特的cout操作。当在show中明确指定模板类型时,一切都如预期:

#include <iostream>
template <class A_Type>
class pair
{
public:
  A_Type a0;
  A_Type a1;
};
void show(const pair<double> & p) {
  std::cout << p.a0 << std::endl;
  std::cout << p.a1 << std::endl;
}
int main() {
  pair<double> p;
  p.a0 = 1.2;
  p.a1 = 1.3;
  show(p);
}

不过,我希望show忽略模板类型。

有什么提示吗?

您可以将show函数更改为:

template<typename DataType>
void show(const pair<DataType> & p) {
   std::cout << p.a0 << std::endl;
   std::cout << p.a1 << std::endl;
}

或者更好的方法(在我看来)是使show函数成为类的成员:

template <class A_Type>
class pair {
   public:
     A_Type a0;
     A_Type a1;
     void show() const {
         std::cout << this->a0 << std::endl;
         std::cout << this->a1 << std::endl;
     }
};

然后简单地说:

int main() {
   pair<double> p;
   p.a0 = 1.2;
   p.a1 = 1.3;
   p.show();
}