c++ - 如何在类声明之外声明模板函数

标签 c++ visual-studio-2008 templates

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

但它没有编译。知道怎么做吗?

最佳答案

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

关于c++ - 如何在类声明之外声明模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1047663/

相关文章:

c++ - 编译cyanoboot : No rule to make target

c++ - 请解释这个歧义?

c++ - 使用 SFINAE 但不要产生编译错误

c++ - 非事件 #ifdef block 中的编译器错误

c++ - VS2008 远程调试器 : An attempt was made to access a socket in a way forbidden by its access permissions

c++ - QML 应用程序崩溃;如何调试?

c++ - 当未初始化的内存传递给函数时如何断言/测试

visual-studio-2010 - 无法在 VSIX 部署模板中引用向导程序集

c++ - 使用 SFINAE 检查是否存在非硬连线成员函数

c++ - 声明采用模板参数的函数