2016-08-02 283 views
0

我有一个模板类pair,我想要写一个函数show类的做一些花哨的cout ING。当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不经意的模板类型的虽然。

任何提示?

+6

只需'template void show(const pair &p){' – DimChtz

+1

如果您将评论推荐给答案,我很乐意将其标记为解决方案。 –

+0

@NicoSclomer只是做了 – DimChtz

回答

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(); 
} 
+0

并且为了您对成员方法的意见,您可以阅读[how-non-member-functions-improvement-encapsulation](http://www.drdobbs.com/cpp/how-non-member-functions -improve-encapsu/184401197) – Jarod42

+0

@ Jarod42在这种情况下,我只是比'show(p)'更喜欢'p.show()'。如果有多个类可以使用它,我宁愿'show(p)'。但是,这只是我的看法。 – DimChtz

+0

*“如果不止一个班级可以使用它,我宁愿show(p)”*。我不明白。你的意思是你更喜欢'show(const对&)'如果有其他类型的重载作为'show(const myVector &)'?我不明白这个说法。 – Jarod42