非成员模板功能

Nic*_*mer 0 c++ templates

我有一个模板化的课程pair,我想在课堂编写一个show函数来做一些想象.在明确指定模板类型时,它都按预期工作:coutshow

#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);
}
Run Code Online (Sandbox Code Playgroud)

我想show忘记模板类型.

任何提示?

Dim*_*htz 6

您可以将show功能更改为:

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

或者更好的方法(在我看来)是使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;
     }
};
Run Code Online (Sandbox Code Playgroud)

然后简单地说:

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

   p.show();
}
Run Code Online (Sandbox Code Playgroud)