如何在类声明外声明模板函数

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);
}

但是它无法编译。有什么方法可以解决吗?

2个回答

8

Naveen的回答是正确的,我可以提供一个建议:我广泛使用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);
}

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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接