[英]How do I make this template class compiling in both VC6 and VC9
我有一個在VC6中可以正常編譯的模板類。 但是它不是在VC9中編譯的。 為此,我在一種類型的前面添加了“ typename”關鍵字。 此后,它將在vc9中進行編譯,而不是在VC6中進行編譯。 如何使用兩個編譯器進行編譯。
#include <map>
#include <vector>
template <class T1, class T2>
class A
{
public:
std::pair<typename std::vector<std::pair<T1,T2> >::iterator, bool > insert(const std::pair<T1 ,T2> &value_in);
};
template <class T1, class T2>
std::pair< std::vector<std::pair<T1,T2> >::iterator, bool> A<T1,T2>::insert(const std::pair<T1 ,T2>& value_in)
{
std::pair< std::vector<std::pair<T1,T2> >::iterator, bool> b;
return b;
}
void main()
{
A<int, int> a;
a.insert(std::pair<int, int>(0, 0));
}
上面的代碼在VC6中編譯。 但不是在VC9中。 以下代碼在VC9中有效,而不在VC6中有效。
#include <map>
#include <vector>
template <class T1, class T2>
class A
{
public:
std::pair<typename std::vector<std::pair<T1,T2> >::iterator, bool > insert(const std::pair<T1 ,T2> &value_in);
};
template <class T1, class T2>
std::pair<typename std::vector<std::pair<T1,T2> >::iterator, bool> A<T1,T2>::insert(const std::pair<T1 ,T2>& value_in)
{
std::pair< std::vector<std::pair<T1,T2> >::iterator, bool> b;
return b;
}
void main()
{
A<int, int> a;
a.insert(std::pair<int, int>(0, 0));
}
VC6不是很符合標准。 您可能只需要#IFDEF就可以解決這個問題。
我沒有VC6,但VC2003也抱怨。 所以我在前面放了一個類型名
std::pair< typename std::vector<std::pair<T1,T2> >::iterator, bool > insert(const std::pair<T1 ,T2> &value_in);
使它
typename std::pair< typename std::vector<std::pair<T1,T2> >::iterator, bool > insert(const std::pair<T1 ,T2> &value_in);
它奏效了,也許您也可以嘗試。 HTH,
更改評論:
#include <map>
#include <vector>
template <class T1, class T2>
class A
{
public:
std::pair<typename std::vector<std::pair<T1,T2> >::iterator, bool > insert(const std::pair<T1 ,T2> &value_in);
};
template <class T1, class T2>
std::pair< typename std::vector<std::pair<T1,T2> >::iterator, bool> // +typename
A<T1,T2>::insert(const std::pair<T1 ,T2>& value_in)
{
std::pair< typename std::vector<std::pair<T1,T2> >::iterator, bool> b; // +typename
return b;
}
int main() // void->int
{
A<int, int> a;
a.insert(std::pair<int, int>(0, 0));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.