![](/img/trans.png)
[英]How to define a friend template function of a template class outside of its declaration?
[英]How do I declare template function outside the class declaration
#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和“true type definition”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);
}
您再次缺少返回值中的typename。 功能應該是:
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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.