2016-08-02 6 views
0

は、私はテンプレートクラスpairを持っている、と私はいくつかの空想cout INGを行うには、クラスの外show機能を書きたいと思います。明示的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

単純にテンプレート 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-improve-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 myVector &)'である場合、 'show(const pair &)'が好きですか?私はその議論を理解していない... – Jarod42

関連する問題