非成员模板功能

时间:2016-08-02 19:48:18

标签: c++ templates

我有一个模板化的课程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忘记模板类型。

任何提示?

1 个答案:

答案 0 :(得分:6)

您可以将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();
}