我有一个简单而微妙的问题。下面是DLL头文件中同一类的两种不同声明变体。
有人可以告诉我这个类声明的区别;
class __declspec(dllexport) Car {
public:
Car();
void drive(void);
typedef enum { None, Indented } Formatting;
}
来自这个?
class Car {
public:
__declspec(dllexport) Car();
__declspec(dllexport) void drive(void);
__declspec(dllexport) typedef enum { None, Indented } Formatting;
}
在第一个声明中,类本身是 __ declspec(dllexport),而在后一种情况下,每个类元素都是单独声明的。
他们是不同的还是他们有共同点?
答案 0 :(得分:4)
使用depends的简短测试表明,第一个示例导出一个额外的符号与第二个符号相比(顺便说一下,您不导出枚举,这是不合法的)。如果我没错,我相信它是默认的赋值运算符。
第一种方法导出整个类,第二种方法只是以declspec为前缀的方法(我猜这里并不奇怪)。
所以我要说导出类的正确方法显然是第一个,我个人没有看到任何使用第二种方法导出的类。
答案 1 :(得分:1)
导出类是导出其所有公共函数的简写。
所以区别在于__declspec
枚举的Formatting
是无意义的。
有时候只导出一组有限的类功能更合适;那么后一种形式是首选。请注意,在您的情况下,将不会导出“自动”生成的析构函数。