奇怪的班级宣言

时间:2010-06-30 11:03:46

标签: c++ class

在Qt的qrect.h中,我发现类声明从这样开始:

class Q_CORE_EXPORT QRect {
};

正如您所看到的,在class关键字后面有两个标识符。我怎么理解这个?
谢谢。

2 个答案:

答案 0 :(得分:11)

Q_CORE_EXPORTa macro that gets expanded to different values,具体取决于编译它的上下文。

该来源的摘录:

#ifndef Q_DECL_EXPORT
#  ifdef Q_OS_WIN
#    define Q_DECL_EXPORT __declspec(dllexport)
#  elif defined(QT_VISIBILITY_AVAILABLE)
#    define Q_DECL_EXPORT __attribute__((visibility("default")))
#  endif
#  ifndef Q_DECL_EXPORT
#    define Q_DECL_EXPORT
#  endif
#endif
#ifndef Q_DECL_IMPORT
#  ifdef Q_OS_WIN
#    define Q_DECL_IMPORT __declspec(dllimport)
#  else
#    define Q_DECL_IMPORT
#  endif
#endif

// ...

#    if defined(QT_BUILD_CORE_LIB)
#      define Q_CORE_EXPORT Q_DECL_EXPORT
#    else
#      define Q_CORE_EXPORT Q_DECL_IMPORT
#    endif

这些值(__declspec(dllexport)__attribute__((visibility("default")))等)是特定于编译器的属性,表示动态库中函数的可见性。

答案 1 :(得分:6)

Q_CORE_EXPORT不是标识符。它是一个依赖于平台的宏,它用于表示要跨库边界使用的类。特别是,它由Qt核心库定义并由其他Qt库使用。