簡體   English   中英

如何在VC6和VC9中都編譯此模板類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM