6

在 gcc 我正在写friend class FriendMaker<T>::Type,但 Visual Studio 想要friend FriendMaker<T>::Type. 所以我认为是时候去编译特定的了。

那么我需要ifdef做什么Visual Studio?我目前使用的是 2010,但以后可能会切换到 2012。

4

3 回答 3

17

使用宏_MSC_VER。检查编译器是否为 VS2010 或更高版本:

#if _MSC_VER >= 1600

以下是不同版本 VS 的值:

  • VS 2003 (VC7.1):1310
  • 对比 2005 (VC8):1400
  • 对比 2008 (VC9):1500
  • 对比 2010 (VC10):1600
  • 对比 2012 (VC11):1700
于 2012-08-01T07:37:41.550 回答
0

只需使用friend class ...两个编译器的语法。没有关键字的friend ...语法class实际上是无效的;VS2010 不抱怨它是不正确的。

看到这个问题

于 2012-08-01T08:00:58.123 回答
0

我认为您需要使用以下代码进行交叉编译:

template <typename T> class B;

template <typename T>
class A
{
    friend typename B<T>::V;
};
于 2014-02-11T21:59:20.203 回答