2009-06-26 107 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

您再次缺少返回值中的类型名称。该功能应该是:

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

谢谢,它的工作:) – 2009-06-26 06:51:59

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 2009-06-26 07:16:47