How do I make this template class compiling in both VC6 and VC9
我有一个模板类在 VC6 中编译得很好。但它没有在 VC9 中编译。为此,我在一种类型前面添加了"typename"关键字。之后它在 vc9 中编译,但不在 VC6 中。我如何使它与两个编译器一起编译。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #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 中无效。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #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 来解决这个问题。
更改评论:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #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)); } |
我没有VC6,但是VC2003也报错。所以我在
之前放了一个类型名
1 | std::pair< typename std::vector<std::pair<T1,T2> >::iterator, bool > insert(const std::pair<T1 ,T2> &value_in); |
制作它
1 | typename std::pair< typename std::vector<std::pair<T1,T2> >::iterator, bool > insert(const std::pair<T1 ,T2> &value_in); |
它成功了,也许你也可以试试。 HTH,