• 7600阅读
  • 3回复

Q_D和Q_Q的思考,问题来了“##”是什么含义呢? [复制链接]

上一主题 下一主题
离线qoozone1234
 

只看楼主 倒序阅读 楼主  发表于: 2008-07-03
— 本帖被 XChinux 执行加亮操作(2008-07-03) —
#define Q_DECLARE_PRIVATE(Class) \
    inline Class##Private* d_func() { return reinterpret_cast<Class##Private *>(d_ptr); } \
    inline const Class##Private* d_func() const { return reinterpret_cast<const Class##Private *>(d_ptr); } \
    friend class Class##Private;

#define Q_DECLARE_PRIVATE_D(Dptr, Class) \
    inline Class##Private* d_func() { return reinterpret_cast<Class##Private *>(Dptr); } \
    inline const Class##Private* d_func() const { return reinterpret_cast<const Class##Private *>(Dptr); } \
    friend class Class##Private;

#define Q_DECLARE_PUBLIC(Class)                                    \
    inline Class* q_func() { return static_cast<Class *>(q_ptr); } \
    inline const Class* q_func() const { return static_cast<const Class *>(q_ptr); } \
    friend class Class;

#define Q_D(Class) Class##Private * const d = d_func()
#define Q_Q(Class) Class * const q = q_func()
离线foxyz

只看该作者 1楼 发表于: 2008-07-03
##是宏定义中用来做字符串连接的符号
离线foxyz

只看该作者 2楼 发表于: 2008-07-03
举个例子,你看Qt源码会发现它使用的一些私有的类,都屁股后边加了private,就打这来的
离线foxyz

只看该作者 3楼 发表于: 2008-07-03
再举个例子:
#define SHOWME(name) (cout<<myname##name<<endl);
......
main()
{
    string mynameyy="my name is : yy";
    SHOWME("yy")    ;    //equal to cout<<mynameyy<<endl;
    int mynamexx=100;
    SHOWME("xx");        //equal to cout<<mynamexx<<endl;
}
快速回复
限100 字节
 
上一个 下一个