C++定义时,以class和类名中间的那个修饰符是什么意思?

2022/7/1 1:19:31

本文主要是介绍C++定义时,以class和类名中间的那个修饰符是什么意思?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

问题:C++中,在定义类时,有时,class和类名中间还有个修饰,这个修饰符是什么意思?
比如今天看mysql connector / C++中的一个定义:

 class CPPCONN_PUBLIC_FUNC MySQL_Connection : public sql::Connection

 {

 public:

......



}

答:

#if defined __DRAW_IMPL__

    #if (defined _AFXDLL && !defined __STAT_WITH_DLLMFC__)

        #define __DRAW_API _declspec(dllexport)

    #else

        #define __DRAW_API

    #endif // _AFXDLL

#else 

    #if (defined _AFXDLL && !defined __STAT_WITH_DLLMFC__)

        #define __DRAW_API _declspec(dllimport)

    #else

        #define __DRAW_API

    #endif // _AFXDLL



    #pragma message("      (Professional User Interface Suite)")

    #pragma comment( lib, __DRAW_LIB_NAME ) 

#endif
一般在编写动态链接库里的类时,经常会定义象上面的宏,主要是为了使用方便,这样在编写库时,只要定义了__DRAW_IMPL__宏,所有动态库中的类都会自动导出,

例如:class __DRAW_API A{};编译时会被展开成calss _declspec(dllexport) A{};

而在用户使用时,因为没有定义__DRAW_IMPL__宏,所有的类自动加上dllimport成为导入类,成为class _declspec(import).

如果静态链接时或者直接使用时,只要定义了__STAT_WITH_DLLMFC__宏,相当于直接定义类,__DRAW_API被展开成空串.


主要是为了方便使用,比如你不这样定义,当你把这个类封装成一个动态库是,你在写类库时,会写在class _declspec(dllexport) A{};并假定把这个类声明放在a.h文件中,并将这个类打包成a.dll,如果用户在使用时,他会怎么用呢?
他一定要改掉你的a.h中关于类A的声明为class _declspec(import) A{};这样,才能在程序中使用你的a.dll这个动态库,再假设这个库里几十个类。。。。。如果你是用户,你会不会想去撞墙。。。。呵呵


这篇关于C++定义时,以class和类名中间的那个修饰符是什么意思?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程