gpt4 book ai didi

c++ - CRTP:从基调用派生类模板化方法

转载 作者:行者123 更新时间:2023-11-30 05:23:21 28 4
gpt4 key购买 nike

请帮我解决以下问题:

我有一个类声明为:

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 ) );
}
};

继承自Design::GenericComponent<>使用 CRTP。在 Design::GenericComponent<> 中有一个方法:

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()方法来自 GenericComponent应该调用 DummyEquation()来自派生的模板化方法 Rim<GEAR_TYPE>类(class)。但是它所列的实现方式不起作用 - 编译器在尝试转换为派生类时报告此指针的常量性问题...

如何让它工作?我已经尝试了几乎所有可能的 const 限定符放置,但没有解决我的问题。再提一件事 - 方法 create<>()不能限定为 const ( create<>() const ) 因为它修改了它的所有者类的内容...

非常感谢任何愿意帮助我的人......干杯马丁

最佳答案

this 是一个指向 const 对象的指针(在 get 的范围内)。将其沿继承层次结构向下转换不会更改结果对象的 const 特性。

因此 DummyEquationcreate 需要是 const 成员函数,或者 get 需要是非常量

关于c++ - CRTP:从基调用派生类模板化方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39246450/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com