为什么Windows上的C++类定义在'class'之后通常有一个宏令牌?

1 c++ windows

我试图了解一个开源项目,在那里我遇到了以下类声明:

class STATE_API AttributeSubject : public AttributeGroup, public Subject
{
public:
    AttributeSubject(const char *);
    virtual ~AttributeSubject();
    virtual void SelectAll() = 0;
    virtual const std::string TypeName() const; 
    virtual void Notify();
    virtual AttributeSubject *CreateCompatible(const std::string &) const;
    virtual AttributeSubject *NewInstance(bool copy) const { return 0; };

    virtual bool VarChangeRequiresReset(void) { return false; };
};
Run Code Online (Sandbox Code Playgroud)

在类名AttributeSubject之前STATE_API表示什么?它是某种宏吗?

Nik*_*nić 9

它可能是__declspec(dllimport)或__declspec(dllexport)的typedef,并且在Windows平台上的DLL内部用于导出类.

尼尔是对的,这是一个宏观.

它通常看起来像这样:

#ifdef INDSIDE_DLL
    #define STATE_API __declspec(dllexport)
#else
    #define STATE_API __declsped(dllimport)
#endif
Run Code Online (Sandbox Code Playgroud)

您只在您的dll中定义INSIDE_DLL并导出使用STATE_API宏声明的所有类.

  • 从语法上讲,它不能是typedef. (2认同)