C++中嵌套类是否需要添加__declspec(dllexport)导出宏MY_API?
结论
不需要单独给嵌套类B添加MY_API导出宏,MSVC编译器会自动对外层导出类的所有公共嵌套类完成导出/导入处理。
具体说明
- 当你为外层类A标记
MY_API后,编译器会自动将类A的所有公开成员、包括内部定义的公共嵌套类B一同纳入导出/导入范围,正常场景下完全可以满足使用需求。 - 你可以通过
dumpbin /exports 你的DLL文件路径命令验证编译产物,能直接找到类B的成员函数other_method()对应的导出符号,无需额外加标记。 - 仅有一种例外场景需要显式给B加
MY_API:如果你的业务需要在DLL外部,不依赖类A的实例直接独立使用A::B类型,且实际调用时出现找不到B相关符号的链接错误,才需要手动给B也添加导出标记,写法参考如下:
class MY_API A { public: void some_method(); class MY_API B { public: void other_method(); }; };
内容的提问来源于stack exchange,提问作者kuga。
相关产品推荐
相关产品推荐

