bitte helfen Sie mir bei folgendem Problem:CRTP: Rufen Sie abgeleitete Klasse Templat-Methode von der Basis
Ich habe eine Klasse deklariert als:
template<typename GEAR_TYPE>
class Rim
: /* Derive from GenericComponent Design perspective using CRTP */
public Design::GenericComponent<Rim<GEAR_TYPE>>
{
public:
template<typename IDENTIFICATION_TAG>
typename Base::Parameter<typename IDENTIFICATION_TAG::UnitType, typename IDENTIFICATION_TAG::DataType>::QuantityType & DummyEquation(void)
{
return(Base::Parameter<typename IDENTIFICATION_TAG::UnitType, typename IDENTIFICATION_TAG::DataType>::QuantityType::from_value(222));
}
};
, die von Design::GenericComponent<>
mit CRTP erbt. Innerhalb Design :: GenericComponent <> gibt es eine Methode:
template<typename DERIVED_COMPONENT_TYPE>
class GenericComponent
{
public:
template<typename PARAM_IDENTIFICATION>
std::shared_ptr<Base::Parameter<typename PARAM_IDENTIFICATION::UnitType, typename PARAM_IDENTIFICATION::DataType>> get(void) const
{
mParameters.template create<PARAM_IDENTIFICATION>(static_cast<const DERIVED_COMPONENT_TYPE *>((this))->template DummyEquation<PARAM_IDENTIFICATION>());
}
};
Die get()
Methode von GenericComponent
sollte die DummyEquation()
Templat-Methode aus der abgeleiteten Rim<GEAR_TYPE>
Klasse aufrufen. Aber die Art, wie es wie aufgeführt implementiert wird, funktioniert nicht - Compiler meldet Probleme mit der Konstanz dieses Zeigers beim Versuch, in abgeleitete Klasse zu werfen ...
Wie bekomme ich das? Ich habe fast alle möglichen Const Qualifier-Platzierungen ausprobiert, aber nichts hat mein Problem gelöst. Nur noch eine Sache zu nennen - die Methode create<>()
nicht als const
qualifiziert werden kann (create<>() const
), wie es der Inhalt es ist Eigentümer Klasse modifiziert ...
Vielen Dank im Voraus für jeden bereit, mir zu helfen ... Prost Martin
DummyEquation muss eine konstante Methode sein, wenn Sie es durch einen Const-Zeiger aufrufen möchten. –