【问题标题】:How do I declare template function outside the class declaration如何在类声明之外声明模板函数
【发布时间】:2009-06-26 06:40:40
【问题描述】:
#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);
}

但它没有编译。任何想法如何做到这一点?

【问题讨论】:

    标签: c++ visual-studio-2008 templates


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您再次缺少返回值中的类型名。函数应该是:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多