Visual studio VisualStudio预处理器的奇怪行为

Visual studio VisualStudio预处理器的奇怪行为,visual-studio,visual-studio-2013,c++-cli,preprocessor,Visual Studio,Visual Studio 2013,C++ Cli,Preprocessor,我目前正在使用C++/CLI开发VS2013社区。我想在那里做一些跨平台的抽象类,为了足够聪明,我写了如下标题: #ifndef SOMECLASS_H #define SOMECLASS_H #ifdef _MSC_VER #define PUBLIC_INTERFACE public interface #else #define PUBLIC_INTERFACE #endif PUBLIC_INTERFACE class SomeClass { public: virtual

我目前正在使用C++/CLI开发VS2013社区。我想在那里做一些跨平台的抽象类,为了足够聪明,我写了如下标题:

#ifndef SOMECLASS_H
#define SOMECLASS_H

#ifdef _MSC_VER
#define PUBLIC_INTERFACE public interface
#else
#define PUBLIC_INTERFACE
#endif

PUBLIC_INTERFACE class SomeClass {
public:
    virtual int DummyMethod(void) = 0;
};

#endif // SOMECLASS_H
问题在于宏PUBLIC_接口,它应该在预处理器工作完成后在MS编译器上为我提供公共接口类。不幸的是,我拥有的是公共结构类。为什么? 我认为这是一些特殊情况,预处理器想做一些特殊的魔术,我不是一个有管理C++的专家,我写了:

#ifdef _MSC_VER
public interface class SomeClass {
#else
class SomeClass {
#endif
public:
    virtual int DummyMethod(void) = 0;
};
但在这种情况下,一切正常,预处理器生成了公共接口类。将宏中的接口关键字转换为结构关键字的原因是什么。我是否做错了什么,或者这是MS预处理器的问题?

Windows SDK中有一个名为interface的宏。您需要使用if defined_MSC_VER&&defined_M_CEEYes来增强自己的能力,但是为什么在我编写的代码的第二部分中,接口没有被struct替换,请记住,它是作为第一个SomeClass声明的替换,所以include也位于该声明之上?只有在宏中使用时,接口才会被struct替换。