zoukankan      html  css  js  c++  java
  • qRegisterMetaType

    qRegisterMetaType<Block>();

    注册类型,并返回id

    去掉Q_DECLARE_METATYPE(Block); 导致错误。但是qRegisterMetaType<Block>(“block”);却可以不加。原因如下:

    template <typename T>
    inline int qRegisterMetaType(

    T * dummy = 0
    )
    {
        return qMetaTypeId(dummy);
    }

    template <typename T>
    inline int qMetaTypeId(
    #ifndef qdoc
        T * /* dummy */ = 0
    #endif
    )
    {
        return QMetaTypeId2<T>::qt_metatype_id();
    }

    -------------------------

    template <typename T>
    struct QMetaTypeId
    {
        enum { Defined = 0 };
    };

    template <typename T>
    struct QMetaTypeId2
    {
        enum { Defined = QMetaTypeId<T>::Defined };
        static inline int qt_metatype_id() { return QMetaTypeId<T>::qt_metatype_id(); }  这个没定义!!
    };

    /opt/QtSDK/Examples/4.7/threads/queuedcustomtype/../../../../Desktop/Qt/474/gcc/include/QtCore/qmetatype.h:169: error: ‘qt_metatype_id’ is not a member of ‘QMetaTypeId<Block>’

    Q_DECLARE_METATYPE(Block); 加入使得qt_metatype_id得到定义。

    #define Q_DECLARE_METATYPE(TYPE)                                        \
        QT_BEGIN_NAMESPACE                                                  \
        template <>                                                         \
        struct QMetaTypeId< TYPE >                                          \
        {                                                                   \
            enum { Defined = 1 };                                           \
            static int qt_metatype_id()                                     \
                {                                                           \
                    static QBasicAtomicInt metatype_id = Q_BASIC_ATOMIC_INITIALIZER(0); \
                    if (!metatype_id)                                       \
                        metatype_id = qRegisterMetaType< TYPE >(#TYPE,      \
                                   reinterpret_cast< TYPE *>(quintptr(-1))); \
                    return metatype_id;                                     \
                }                                                           \
        };                                                                  \
        QT_END_NAMESPACE

  • 相关阅读:
    【BZOJ5302】[HAOI2018]奇怪的背包(动态规划,容斥原理)
    【BZOJ5303】[HAOI2018]反色游戏(Tarjan,线性基)
    【BZOJ5304】[HAOI2018]字串覆盖(后缀数组,主席树,倍增)
    【BZOJ5305】[HAOI2018]苹果树(组合计数)
    【BZOJ5300】[CQOI2018]九连环 (高精度,FFT)
    【BZOJ5292】[BJOI2018]治疗之雨(高斯消元)
    【BZOJ5298】[CQOI2018]交错序列(动态规划,矩阵快速幂)
    【BZOJ5289】[HNOI2018]排列(贪心)
    Codeforces Round #539 Div1 题解
    【BZOJ5288】[HNOI2018]游戏(拓扑排序)
  • 原文地址:https://www.cnblogs.com/cute/p/2252686.html
Copyright © 2011-2022 走看看