我正在阅读一个C ++头文件,其中写有:
class CLASSEXPORT skExecutable : {.....}
评论说CLASSEXPORT是一个宏扩展,然后我找到定义CLASSEXPORT的地方。
#define CLASSEXPORT
这就是全部......我对此感到困惑。在这种意义上,CLASSEXPORT代表什么?如何理解skExecutable类?
答案 0 :(得分:3)
在您的情况下,CLASSEXPORT
被扩展为空(可能因为不需要将其扩展为您的确切配置中有意义的内容),因此您的类将只是class skExecutable {<...>};
。这种方法通常用于导入/导出指令,例如在下面的代码片段中,根据是否定义了COMPILING_DLL
宏,将使用适当的指令:
#if COMPILING_DLL
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __declspec(dllimport)
#endif
class DLLEXPORT MyClass
{
};
答案 1 :(得分:1)
只是为了清除一些内容:CLASSEXPORT
是一个宏。 宏扩展是一个在编译之前执行的过程,在此过程中,所有宏都被替换为它们被定义为的任何宏。
在您的情况下,我怀疑CLASSEXPORT
是否允许以这种方式声明的所有类在将来需要时导出到某种共享库。然后将CLASSEXPORT
定义为
#define CLASSEXPORT __declspec(dllexport)
您可以直接从共享库中使用skExecutable
。