我有一个在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就可以解决这个问题。

关于c++ - 如何在VC6和VC9中都编译此模板类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1109050/

10-10 21:51