refs #413 Macros to ease the task of disambiguating inherited members when using mixins in an inheritance hierarchy.

This commit is contained in:
Mathew Sutcliffe
2015-05-03 23:15:02 +01:00
parent 36a2e1a2bb
commit 68ebcd7b8d
10 changed files with 89 additions and 153 deletions

View File

@@ -31,13 +31,7 @@ namespace BlackMisc
//! Base type
using base_type = CModulator<CAdfSystem>;
using Mixin::MetaType<CAdfSystem>::registerMetadata;
using Mixin::MetaType<CAdfSystem>::getMetaTypeId;
using Mixin::MetaType<CAdfSystem>::isA;
using Mixin::MetaType<CAdfSystem>::toCVariant;
using Mixin::MetaType<CAdfSystem>::toQVariant;
using Mixin::MetaType<CAdfSystem>::convertFromCVariant;
using Mixin::MetaType<CAdfSystem>::convertFromQVariant;
BLACKMISC_DECLARE_USING_MIXIN_METATYPE(CAdfSystem)
//! Default constructor
CAdfSystem() = default;

View File

@@ -39,23 +39,11 @@ namespace BlackMisc
//! Base type
using base_type = PhysicalQuantities::CLength;
using Mixin::MetaTypeAndQList<CAltitude>::registerMetadata;
using Mixin::MetaTypeAndQList<CAltitude>::getMetaTypeId;
using Mixin::MetaTypeAndQList<CAltitude>::isA;
using Mixin::MetaTypeAndQList<CAltitude>::toCVariant;
using Mixin::MetaTypeAndQList<CAltitude>::toQVariant;
using Mixin::MetaTypeAndQList<CAltitude>::convertFromCVariant;
using Mixin::MetaTypeAndQList<CAltitude>::convertFromQVariant;
using Mixin::String<CAltitude>::toQString;
using Mixin::String<CAltitude>::toFormattedQString;
using Mixin::String<CAltitude>::toStdString;
using Mixin::String<CAltitude>::stringForStreaming;
using Mixin::DBusByTuple<CAltitude>::marshallToDbus;
using Mixin::DBusByTuple<CAltitude>::unmarshallFromDbus;
using Mixin::JsonByTuple<CAltitude>::toJson;
using Mixin::JsonByTuple<CAltitude>::convertFromJson;
using Mixin::Icon<CAltitude>::toIcon;
using Mixin::Icon<CAltitude>::toPixmap;
BLACKMISC_DECLARE_USING_MIXIN_METATYPE_AND_QLIST(CAltitude)
BLACKMISC_DECLARE_USING_MIXIN_STRING(CAltitude)
BLACKMISC_DECLARE_USING_MIXIN_DBUS(CAltitude)
BLACKMISC_DECLARE_USING_MIXIN_JSON(CAltitude)
BLACKMISC_DECLARE_USING_MIXIN_ICON(CAltitude)
/*!
* Enum type to distinguish between MSL and AGL

View File

@@ -30,13 +30,7 @@ namespace BlackMisc
//! Base type
using base_type = CModulator<CComSystem>;
using Mixin::MetaType<CComSystem>::registerMetadata;
using Mixin::MetaType<CComSystem>::getMetaTypeId;
using Mixin::MetaType<CComSystem>::isA;
using Mixin::MetaType<CComSystem>::toCVariant;
using Mixin::MetaType<CComSystem>::toQVariant;
using Mixin::MetaType<CComSystem>::convertFromCVariant;
using Mixin::MetaType<CComSystem>::convertFromQVariant;
BLACKMISC_DECLARE_USING_MIXIN_METATYPE(CComSystem)
//! Channel spacing frequency
enum ChannelSpacing

View File

@@ -38,21 +38,10 @@ namespace BlackMisc
//! Base type
using base_type = PhysicalQuantities::CAngle;
using Mixin::MetaTypeAndQList<CHeading>::registerMetadata;
using Mixin::MetaTypeAndQList<CHeading>::getMetaTypeId;
using Mixin::MetaTypeAndQList<CHeading>::isA;
using Mixin::MetaTypeAndQList<CHeading>::toCVariant;
using Mixin::MetaTypeAndQList<CHeading>::toQVariant;
using Mixin::MetaTypeAndQList<CHeading>::convertFromCVariant;
using Mixin::MetaTypeAndQList<CHeading>::convertFromQVariant;
using Mixin::String<CHeading>::toQString;
using Mixin::String<CHeading>::toFormattedQString;
using Mixin::String<CHeading>::toStdString;
using Mixin::String<CHeading>::stringForStreaming;
using Mixin::DBusByTuple<CHeading>::marshallToDbus;
using Mixin::DBusByTuple<CHeading>::unmarshallFromDbus;
using Mixin::JsonByTuple<CHeading>::toJson;
using Mixin::JsonByTuple<CHeading>::convertFromJson;
BLACKMISC_DECLARE_USING_MIXIN_METATYPE_AND_QLIST(CHeading)
BLACKMISC_DECLARE_USING_MIXIN_STRING(CHeading)
BLACKMISC_DECLARE_USING_MIXIN_DBUS(CHeading)
BLACKMISC_DECLARE_USING_MIXIN_JSON(CHeading)
//! Enum type to distinguish between true north and magnetic north
enum ReferenceNorth

View File

@@ -30,13 +30,7 @@ namespace BlackMisc
//! Base type
using base_type = CModulator<CNavSystem>;
using Mixin::MetaType<CNavSystem>::registerMetadata;
using Mixin::MetaType<CNavSystem>::getMetaTypeId;
using Mixin::MetaType<CNavSystem>::isA;
using Mixin::MetaType<CNavSystem>::toCVariant;
using Mixin::MetaType<CNavSystem>::toQVariant;
using Mixin::MetaType<CNavSystem>::convertFromCVariant;
using Mixin::MetaType<CNavSystem>::convertFromQVariant;
BLACKMISC_DECLARE_USING_MIXIN_METATYPE(CNavSystem)
//! Default constructor
CNavSystem() = default;

View File

@@ -39,21 +39,10 @@ namespace BlackMisc
//! Base type
using base_type = PhysicalQuantities::CAngle;
using Mixin::MetaTypeAndQList<CTrack>::registerMetadata;
using Mixin::MetaTypeAndQList<CTrack>::getMetaTypeId;
using Mixin::MetaTypeAndQList<CTrack>::isA;
using Mixin::MetaTypeAndQList<CTrack>::toCVariant;
using Mixin::MetaTypeAndQList<CTrack>::toQVariant;
using Mixin::MetaTypeAndQList<CTrack>::convertFromCVariant;
using Mixin::MetaTypeAndQList<CTrack>::convertFromQVariant;
using Mixin::String<CTrack>::toQString;
using Mixin::String<CTrack>::toFormattedQString;
using Mixin::String<CTrack>::toStdString;
using Mixin::String<CTrack>::stringForStreaming;
using Mixin::DBusByTuple<CTrack>::marshallToDbus;
using Mixin::DBusByTuple<CTrack>::unmarshallFromDbus;
using Mixin::JsonByTuple<CTrack>::toJson;
using Mixin::JsonByTuple<CTrack>::convertFromJson;
BLACKMISC_DECLARE_USING_MIXIN_METATYPE_AND_QLIST(CTrack)
BLACKMISC_DECLARE_USING_MIXIN_STRING(CTrack)
BLACKMISC_DECLARE_USING_MIXIN_DBUS(CTrack)
BLACKMISC_DECLARE_USING_MIXIN_JSON(CTrack)
/*!
* Enum type to distinguish between true north and magnetic north

View File

@@ -32,17 +32,8 @@ namespace BlackMisc
//! Base type
using base_type = CEarthAngle<CLatitude>;
using Mixin::MetaType<CLatitude>::registerMetadata;
using Mixin::MetaType<CLatitude>::getMetaTypeId;
using Mixin::MetaType<CLatitude>::isA;
using Mixin::MetaType<CLatitude>::toCVariant;
using Mixin::MetaType<CLatitude>::toQVariant;
using Mixin::MetaType<CLatitude>::convertFromCVariant;
using Mixin::MetaType<CLatitude>::convertFromQVariant;
using Mixin::String<CLatitude>::toQString;
using Mixin::String<CLatitude>::toFormattedQString;
using Mixin::String<CLatitude>::toStdString;
using Mixin::String<CLatitude>::stringForStreaming;
BLACKMISC_DECLARE_USING_MIXIN_METATYPE(CLatitude)
BLACKMISC_DECLARE_USING_MIXIN_STRING(CLatitude)
//! \copydoc CValueObject::convertToQString
QString convertToQString(bool i18n = false) const

View File

@@ -31,17 +31,8 @@ namespace BlackMisc
//! Base type
using base_type = CEarthAngle<CLongitude>;
using Mixin::MetaType<CLongitude>::registerMetadata;
using Mixin::MetaType<CLongitude>::getMetaTypeId;
using Mixin::MetaType<CLongitude>::isA;
using Mixin::MetaType<CLongitude>::toCVariant;
using Mixin::MetaType<CLongitude>::toQVariant;
using Mixin::MetaType<CLongitude>::convertFromCVariant;
using Mixin::MetaType<CLongitude>::convertFromQVariant;
using Mixin::String<CLongitude>::toQString;
using Mixin::String<CLongitude>::toFormattedQString;
using Mixin::String<CLongitude>::toStdString;
using Mixin::String<CLongitude>::stringForStreaming;
BLACKMISC_DECLARE_USING_MIXIN_METATYPE(CLongitude)
BLACKMISC_DECLARE_USING_MIXIN_STRING(CLongitude)
//! \copydoc CValueObject::convertToQString
QString convertToQString(bool i18n = false) const

View File

@@ -62,13 +62,7 @@ namespace BlackMisc
//! Base type
using base_type = CMeasurementUnit;
using Mixin::MetaTypeAndQList<CLengthUnit>::registerMetadata;
using Mixin::MetaTypeAndQList<CLengthUnit>::getMetaTypeId;
using Mixin::MetaTypeAndQList<CLengthUnit>::isA;
using Mixin::MetaTypeAndQList<CLengthUnit>::toCVariant;
using Mixin::MetaTypeAndQList<CLengthUnit>::toQVariant;
using Mixin::MetaTypeAndQList<CLengthUnit>::convertFromCVariant;
using Mixin::MetaTypeAndQList<CLengthUnit>::convertFromQVariant;
BLACKMISC_DECLARE_USING_MIXIN_METATYPE_AND_QLIST(CLengthUnit)
//! Default constructor, required for Qt Metasystem
CLengthUnit() : CMeasurementUnit(defaultUnit()) {}
@@ -183,13 +177,7 @@ namespace BlackMisc
//! Base type
using base_type = CMeasurementUnit;
using Mixin::MetaTypeAndQList<CAngleUnit>::registerMetadata;
using Mixin::MetaTypeAndQList<CAngleUnit>::getMetaTypeId;
using Mixin::MetaTypeAndQList<CAngleUnit>::isA;
using Mixin::MetaTypeAndQList<CAngleUnit>::toCVariant;
using Mixin::MetaTypeAndQList<CAngleUnit>::toQVariant;
using Mixin::MetaTypeAndQList<CAngleUnit>::convertFromCVariant;
using Mixin::MetaTypeAndQList<CAngleUnit>::convertFromQVariant;
BLACKMISC_DECLARE_USING_MIXIN_METATYPE_AND_QLIST(CAngleUnit)
//! Default constructor, required for Qt Metasystem
CAngleUnit() : CMeasurementUnit(defaultUnit()) {}
@@ -287,13 +275,7 @@ namespace BlackMisc
//! Base type
using base_type = CMeasurementUnit;
using Mixin::MetaTypeAndQList<CFrequencyUnit>::registerMetadata;
using Mixin::MetaTypeAndQList<CFrequencyUnit>::getMetaTypeId;
using Mixin::MetaTypeAndQList<CFrequencyUnit>::isA;
using Mixin::MetaTypeAndQList<CFrequencyUnit>::toCVariant;
using Mixin::MetaTypeAndQList<CFrequencyUnit>::toQVariant;
using Mixin::MetaTypeAndQList<CFrequencyUnit>::convertFromCVariant;
using Mixin::MetaTypeAndQList<CFrequencyUnit>::convertFromQVariant;
BLACKMISC_DECLARE_USING_MIXIN_METATYPE_AND_QLIST(CFrequencyUnit)
//! Default constructor, required for Qt Metasystem
CFrequencyUnit() : CMeasurementUnit(defaultUnit()) {}
@@ -384,13 +366,7 @@ namespace BlackMisc
//! Base type
using base_type = CMeasurementUnit;
using Mixin::MetaTypeAndQList<CMassUnit>::registerMetadata;
using Mixin::MetaTypeAndQList<CMassUnit>::getMetaTypeId;
using Mixin::MetaTypeAndQList<CMassUnit>::isA;
using Mixin::MetaTypeAndQList<CMassUnit>::toCVariant;
using Mixin::MetaTypeAndQList<CMassUnit>::toQVariant;
using Mixin::MetaTypeAndQList<CMassUnit>::convertFromCVariant;
using Mixin::MetaTypeAndQList<CMassUnit>::convertFromQVariant;
BLACKMISC_DECLARE_USING_MIXIN_METATYPE_AND_QLIST(CMassUnit)
//! Default constructor, required for Qt Metasystem
CMassUnit() : CMeasurementUnit(defaultUnit()) {}
@@ -491,13 +467,7 @@ namespace BlackMisc
//! Base type
using base_type = CMeasurementUnit;
using Mixin::MetaTypeAndQList<CPressureUnit>::registerMetadata;
using Mixin::MetaTypeAndQList<CPressureUnit>::getMetaTypeId;
using Mixin::MetaTypeAndQList<CPressureUnit>::isA;
using Mixin::MetaTypeAndQList<CPressureUnit>::toCVariant;
using Mixin::MetaTypeAndQList<CPressureUnit>::toQVariant;
using Mixin::MetaTypeAndQList<CPressureUnit>::convertFromCVariant;
using Mixin::MetaTypeAndQList<CPressureUnit>::convertFromQVariant;
BLACKMISC_DECLARE_USING_MIXIN_METATYPE_AND_QLIST(CPressureUnit)
//! Default constructor, required for Qt Metasystem
CPressureUnit() : CMeasurementUnit(defaultUnit()) {}
@@ -619,13 +589,7 @@ namespace BlackMisc
//! Base type
using base_type = CMeasurementUnit;
using Mixin::MetaTypeAndQList<CTemperatureUnit>::registerMetadata;
using Mixin::MetaTypeAndQList<CTemperatureUnit>::getMetaTypeId;
using Mixin::MetaTypeAndQList<CTemperatureUnit>::isA;
using Mixin::MetaTypeAndQList<CTemperatureUnit>::toCVariant;
using Mixin::MetaTypeAndQList<CTemperatureUnit>::toQVariant;
using Mixin::MetaTypeAndQList<CTemperatureUnit>::convertFromCVariant;
using Mixin::MetaTypeAndQList<CTemperatureUnit>::convertFromQVariant;
BLACKMISC_DECLARE_USING_MIXIN_METATYPE_AND_QLIST(CTemperatureUnit)
//! Default constructor, required for Qt Metasystem
CTemperatureUnit() : CMeasurementUnit(defaultUnit()) {}
@@ -710,13 +674,7 @@ namespace BlackMisc
//! Base type
using base_type = CMeasurementUnit;
using Mixin::MetaTypeAndQList<CSpeedUnit>::registerMetadata;
using Mixin::MetaTypeAndQList<CSpeedUnit>::getMetaTypeId;
using Mixin::MetaTypeAndQList<CSpeedUnit>::isA;
using Mixin::MetaTypeAndQList<CSpeedUnit>::toCVariant;
using Mixin::MetaTypeAndQList<CSpeedUnit>::toQVariant;
using Mixin::MetaTypeAndQList<CSpeedUnit>::convertFromCVariant;
using Mixin::MetaTypeAndQList<CSpeedUnit>::convertFromQVariant;
BLACKMISC_DECLARE_USING_MIXIN_METATYPE_AND_QLIST(CSpeedUnit)
//! Default constructor, required for Qt Metasystem
CSpeedUnit() : CMeasurementUnit(defaultUnit()) {}
@@ -825,13 +783,7 @@ namespace BlackMisc
//! Base type
using base_type = CMeasurementUnit;
using Mixin::MetaTypeAndQList<CTimeUnit>::registerMetadata;
using Mixin::MetaTypeAndQList<CTimeUnit>::getMetaTypeId;
using Mixin::MetaTypeAndQList<CTimeUnit>::isA;
using Mixin::MetaTypeAndQList<CTimeUnit>::toCVariant;
using Mixin::MetaTypeAndQList<CTimeUnit>::toQVariant;
using Mixin::MetaTypeAndQList<CTimeUnit>::convertFromCVariant;
using Mixin::MetaTypeAndQList<CTimeUnit>::convertFromQVariant;
BLACKMISC_DECLARE_USING_MIXIN_METATYPE_AND_QLIST(CTimeUnit)
//! Default constructor, required for Qt Metasystem
CTimeUnit() : CMeasurementUnit(defaultUnit()) {}
@@ -961,13 +913,7 @@ namespace BlackMisc
//! Base type
using base_type = CMeasurementUnit;
using Mixin::MetaTypeAndQList<CAccelerationUnit>::registerMetadata;
using Mixin::MetaTypeAndQList<CAccelerationUnit>::getMetaTypeId;
using Mixin::MetaTypeAndQList<CAccelerationUnit>::isA;
using Mixin::MetaTypeAndQList<CAccelerationUnit>::toCVariant;
using Mixin::MetaTypeAndQList<CAccelerationUnit>::toQVariant;
using Mixin::MetaTypeAndQList<CAccelerationUnit>::convertFromCVariant;
using Mixin::MetaTypeAndQList<CAccelerationUnit>::convertFromQVariant;
BLACKMISC_DECLARE_USING_MIXIN_METATYPE_AND_QLIST(CAccelerationUnit)
//! Default constructor, required for Qt Metasystem
CAccelerationUnit() : CMeasurementUnit(defaultUnit()) {}

View File

@@ -207,6 +207,32 @@ namespace BlackMisc
class MetaTypeAndQList : public MetaType<Derived, QList<Derived>>
{};
/*!
* When a derived class and a base class both inherit from Mixin::MetaType,
* the derived class uses this macro to disambiguate the inherited members.
*/
# define BLACKMISC_DECLARE_USING_MIXIN_METATYPE(DERIVED) \
using ::BlackMisc::Mixin::MetaType<DERIVED>::registerMetadata; \
using ::BlackMisc::Mixin::MetaType<DERIVED>::getMetaTypeId; \
using ::BlackMisc::Mixin::MetaType<DERIVED>::isA; \
using ::BlackMisc::Mixin::MetaType<DERIVED>::toCVariant; \
using ::BlackMisc::Mixin::MetaType<DERIVED>::toQVariant; \
using ::BlackMisc::Mixin::MetaType<DERIVED>::convertFromCVariant; \
using ::BlackMisc::Mixin::MetaType<DERIVED>::convertFromQVariant;
/*!
* When a derived class and a base class both inherit from Mixin::MetaType,
* the derived class uses this macro to disambiguate the inherited members.
*/
# define BLACKMISC_DECLARE_USING_MIXIN_METATYPE_AND_QLIST(DERIVED) \
using ::BlackMisc::Mixin::MetaTypeAndQList<DERIVED>::registerMetadata; \
using ::BlackMisc::Mixin::MetaTypeAndQList<DERIVED>::getMetaTypeId; \
using ::BlackMisc::Mixin::MetaTypeAndQList<DERIVED>::isA; \
using ::BlackMisc::Mixin::MetaTypeAndQList<DERIVED>::toCVariant; \
using ::BlackMisc::Mixin::MetaTypeAndQList<DERIVED>::toQVariant; \
using ::BlackMisc::Mixin::MetaTypeAndQList<DERIVED>::convertFromCVariant; \
using ::BlackMisc::Mixin::MetaTypeAndQList<DERIVED>::convertFromQVariant;
/*!
* CRTP class template from which a derived class can inherit common methods dealing with hashing instances by metatuple.
*/
@@ -289,6 +315,14 @@ namespace BlackMisc
static void baseUnmarshall(void *, const QDBusArgument &) {}
};
/*!
* When a derived class and a base class both inherit from Mixin::DBusByTuple,
* the derived class uses this macro to disambiguate the inherited members.
*/
# define BLACKMISC_DECLARE_USING_MIXIN_DBUS(DERIVED) \
using ::BlackMisc::Mixin::DBusByTuple<DERIVED>::marshallToDbus; \
using ::BlackMisc::Mixin::DBusByTuple<DERIVED>::unmarshallFromDbus;
/*!
* CRTP class template which will generate marshalling operators for a derived class with its own marshalling implementation.
*/
@@ -363,6 +397,14 @@ namespace BlackMisc
static void baseConvertFromJson(void *, const QJsonObject &) {}
};
/*!
* When a derived class and a base class both inherit from Mixin::JsonByTuple,
* the derived class uses this macro to disambiguate the inherited members.
*/
# define BLACKMISC_DECLARE_USING_MIXIN_JSON(DERIVED) \
using ::BlackMisc::Mixin::JsonByTuple<DERIVED>::toJson; \
using ::BlackMisc::Mixin::JsonByTuple<DERIVED>::convertFromJson;
/*!
* CRTP class template from which a derived class can inherit operator== implemented using its compare function.
*/
@@ -528,6 +570,16 @@ namespace BlackMisc
Derived *derived() { return static_cast<Derived *>(this); }
};
/*!
* When a derived class and a base class both inherit from Mixin::String,
* the derived class uses this macro to disambiguate the inherited members.
*/
# define BLACKMISC_DECLARE_USING_MIXIN_STRING(DERIVED) \
using ::BlackMisc::Mixin::String<DERIVED>::toQString; \
using ::BlackMisc::Mixin::String<DERIVED>::toFormattedQString; \
using ::BlackMisc::Mixin::String<DERIVED>::toStdString; \
using ::BlackMisc::Mixin::String<DERIVED>::stringForStreaming;
/*!
* CRTP class template from which a derived class can inherit property indexing functions.
*/
@@ -582,6 +634,14 @@ namespace BlackMisc
Derived *derived() { return static_cast<Derived *>(this); }
};
/*!
* When a derived class and a base class both inherit from Mixin::Icon,
* the derived class uses this macro to disambiguate the inherited members.
*/
# define BLACKMISC_DECLARE_USING_MIXIN_ICON(DERIVED) \
using ::BlackMisc::Mixin::Icon<DERIVED>::toIcon; \
using ::BlackMisc::Mixin::Icon<DERIVED>::toPixmap;
}
/*!