2009-06-26 9 views
3
#include <iterator> 
#include <map> 
#include <vector> 

template <class T1, class T2> 
class A 
{ 
public: 

    typedef typename std::vector<std::pair<T1,T2> >::iterator iterator; 

    std::pair<iterator, bool > foo() 
    { 
     iterator aIter; 
     return std::pair<std::vector<std::pair<T1,T2> >::iterator, bool >(aIter ,false); 
    } 
}; 

クラス宣言の外にテンプレート関数を宣言します。しかし、私はクラス宣言の外で関数の定義を移動したい。私はこれを試した。は、どのように私は上記のコードは私のために正常に動作

template <class T1, class T2> 
class A 
{ 
public: 

    typedef typename std::vector<std::pair<T1,T2> >::iterator iterator; 

    std::pair<iterator, bool > foo(); 
}; 

template <class T1, class T2> 
std::pair<std::vector<std::pair<T1,T2> >::iterator, bool > A<T1, T2>::foo() 
{ 
    iterator aIter; 
    return std::pair<std::vector<std::pair<T1,T2> >::iterator, bool >(aIter ,false); 
} 

コンパイルされていません。任意のアイデアこれを行う方法?

答えて

6

戻り値の型名がもう一度ありません。機能は次のようになりますのNaveenの答えが正しいか

template <class T1, class T2> 
std::pair<typename std::vector<std::pair<T1,T2> >::iterator, bool > A<T1, T2>::foo() 
{ 
    iterator aIter; 
    return std::pair<std::vector<std::pair<T1,T2> >::iterator, bool >(aIter ,false); 
} 
+0

ありがとう、それは働いた:) –

8

、私は提案を追加することができます:私は広範囲に使用のtypedefと私はテンプレートのtypedefと「真の型定義」のtypedefを待っています。

template <class T1, class T2> 
class A 
{ 
public: 
    typedef typename std::vector<std::pair<T1,T2> >::iterator iterator; 
    typedef std::pair<iterator, bool > MyPair; 
    MyPair foo(); 
}; 

template <class T1, class T2> 
typename A<T1,T2>::MyPair A<T1, T2>::foo() 
{ 
    iterator aIter; 
    return MyPair(aIter ,false); 
} 
+0

+1は確かにコードを読むことがずっと簡単です – Naveen

関連する問題