##// END OF EJS Templates
Parser refactoring (3)...
Parser refactoring (3) Implements properties reading and properties checking Implementation takes some of the basic parser, which will be deleted at the end

File last commit:

r308:d6942e8f24d6
r987:49134789d5f3
Show More
MetaTypes.h
46 lines | 1.4 KiB | text/x-c | CLexer
#ifndef SCIQLOP_METATYPES_H
#define SCIQLOP_METATYPES_H
#include <QMetaType>
/**
* Struct used to create an instance that registers a type in Qt for signals / slots mechanism
* @tparam T the type to register
*/
template <typename T>
struct MetaTypeRegistry {
explicit MetaTypeRegistry() { qRegisterMetaType<T>(); }
};
/**
* This macro can be used to :
* - declare a type as a Qt meta type
* - and register it (through a static instance) at the launch of SciQlop, so it can be passed in
* Qt signals/slots
*
* It can be used both in .h or in .cpp files
*
* @param NAME name of the instance under which the type will be registered (in uppercase)
* @param TYPE type to register
*
* Example:
* ~~~cpp
* // The following macro :
* // - declares std::shared_ptr<Variable> as a Qt meta type
* // - registers it through an instance named VAR_SHARED_PTR
* SCIQLOP_REGISTER_META_TYPE(VAR_SHARED_PTR, std::shared_ptr<Variable>)
*
* // The following macro :
* // - declares a raw pointer of Variable as a Qt meta type
* // - registers it through an instance named VAR_RAW_PTR
* SCIQLOP_REGISTER_META_TYPE(VAR_RAW_PTR, Variable*)
* ~~~
*
*/
// clang-format off
#define SCIQLOP_REGISTER_META_TYPE(NAME, TYPE) \
Q_DECLARE_METATYPE(TYPE) \
const auto NAME = MetaTypeRegistry<TYPE>{}; \
// clang-format on
#endif // SCIQLOP_METATYPES_H