请帮我解决以下问题:
我有一个声明为:
的类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 ) );
}
};
使用CRTP从Design::GenericComponent<>
继承。在Design :: GenericComponent&lt;&gt;中有一种方法:
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>() );
}
};
来自get()
的{{1}}方法应该从派生的GenericComponent
类调用DummyEquation()
模板化方法。但是它列出的实现方式不起作用 - 编译器在尝试转换为派生类时会报告此指针的常量问题......
如何让这个工作?我已经尝试了几乎所有可能的const限定符位置,但没有解决我的问题。还有一件事需要提及 - 方法Rim<GEAR_TYPE>
无法限定为create<>()
(const
),因为它会修改其所有者类的内容......
非常感谢愿意帮助我的人...干杯马丁
答案 0 :(得分:1)
this
是指向const
对象的指针(在get
范围内)。将其转换为继承层次结构并不会更改结果对象的const
- 。
所以DummyEquation
&amp; create
必须是const
个成员函数,或get
必须是非const
。