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

silwoods 2010-03-29 08:32:35
C++中,在定义类时,有时,class和类名中间还有个修饰,这个修饰符是什么意思?
比如今天看mysql connector / C++中的一个定义:
 class CPPCONN_PUBLIC_FUNC MySQL_Connection : public sql::Connection
{
public:
......

}


这里MySQL_Connection 是类名,在类名和class中间的CPPCONN_PUBLIC_FUNC是什么意思?
谢谢哈
...全文
1167 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
silwoods 2010-03-29
  • 打赏
  • 举报
回复
明白了,谢谢哈
chen_wenyue 2010-03-29
  • 打赏
  • 举报
回复
主要是为了方便使用,比如你不这样定义,当你把这个类封装成一个动态库是,你在写类库时,会写在class _declspec(dllexport) A{};并假定把这个类声明放在a.h文件中,并将这个类打包成a.dll,如果用户在使用时,他会怎么用呢?
他一定要改掉你的a.h中关于类A的声明为class _declspec(import) A{};这样,才能在程序中使用你的a.dll这个动态库,再假设这个库里几十个类。。。。。如果你是用户,你会不会想去撞墙。。。。呵呵
silwoods 2010-03-29
  • 打赏
  • 举报
回复
谢谢chen_wenyue兄,还是有点迷糊。
我主要是不明白在class和类名中间加个东西,这种写法是什么意思,比如你提到的:

calss _declspec(dllexport) A{};

这里_declspec(dllexport)和类A是什么关系呢?

class A{};
是指定义一个类A。加上_declspec(dllexport),对类A的影响是什么呢?
谢谢
chen_wenyue 2010-03-29
  • 打赏
  • 举报
回复

#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被展开成空串.
BT六眼飞鱼 2010-03-29
  • 打赏
  • 举报
回复
CPPCONN_PUBLIC_FUNC是一个宏定义

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧