2016-08-02 103 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