C++ 动态_-cast在dervied构造函数中
我有一个基类和派生类,还有一个BaseType和DerivedType。在基类上,我有一个BaseType的对象(不是指针)。 我希望在派生类的构造函数上执行从BaseType到DerivedType的动态转换C++ 动态_-cast在dervied构造函数中,c++,dynamic-cast,C++,Dynamic Cast,我有一个基类和派生类,还有一个BaseType和DerivedType。在基类上,我有一个BaseType的对象(不是指针)。 我希望在派生类的构造函数上执行从BaseType到DerivedType的动态转换 class DerivedType: public BaseType{}; class Base{ BaseType basetype; //not a pointer } class Derived : public Base{ Derived(){
class DerivedType: public BaseType{};
class Base{
BaseType basetype; //not a pointer
}
class Derived : public Base{
Derived(){
//I want to do in this constructor a dynamic_cast from
// "basetype" to "DerivedType"
// when "DerivedType" inherits from "BaseType" also
}
};
我有两个类class-DerivedType:public-BaseType
class-Derived:public-Base
在Base
类I上有一个BaseType
的对象(不是指针)
我需要使用Derived
类的构造函数将此对象的类型更改为DerivedType
我的老板告诉我使用dynamic\u cast
我需要这样做,因为如果我要使用class C:public-Derived
当我使用“basetype”时,它将自动DerivedType
,而不是basetype您不能更改成员的类型basetype
,无论是使用动态\u cast
还是任何其他方式。
如果你的老板让你这么做,他们要么是大错特错,要么是没有把你应该做的事情说清楚。我建议你要求澄清
实现此功能的一种常见方法(即类型依赖于子类的成员)是将基类转换为模板,并将成员的类型作为参数传递:
template<typename MemberType = BaseType> // Default type is BaseType
class Base{
MemberType something;
}
class Derived : public Base <DerivedType>
{
Derived()
{
// 'something' has type DerivedType
}
};
template//默认类型为BaseType
阶级基础{
输入某物;
}
派生类:公共基
{
派生的()
{
//“something”具有派生类型
}
};
非常重要的一点是:一旦构建了一个对象,它的类型就是
固定的,并且无论如何都不能更改。如果Base
有成员
名为basetype
,该对象由的构造函数构造
Base
,然后任何派生类才能访问它,以及该类的类型
对象是在Base
中声明的对象,并且永远不能更改。
您可以在其上使用dynamic\u cast
(例如dynamic\u cast
),
但这一角色注定会失败
现在还不清楚你想要实现什么。也许是某种
策略模式就是您要寻找的,其中Base::basetype
是通过传递到Base::Base()
的对象的指针或引用
派生::派生()
。或者它实际上是basetype
这应该改变,这是没有问题的。(这是什么名字
建议)描述一下你想要达到的目标,我们也许可以
找到解决办法。我想我不明白。您是否希望Base
具有类BaseType
的成员,以及Derived
具有DerivedType
的成员?这是可能的。是否希望派生的派生类型的派生类型的-对象与相应的基本类型的基本类型的-对象相同?那不是直接表达的。无论如何;为什么您认为您需要dynamic\u cast
?您打算用dynamic cast进行哪些转换?在您的示例中,没有由BaseType*
指向的DerivedType
实例。您似乎误解了动态转换的作用。如果我理解了你的问题:1.你能更详细地介绍一下你想要完成的事情吗。我可以在派生类上添加我想要的内容,以便将BaseType对象强制转换为DerivedType 2。我想我需要动态施法,因为这是梅老板告诉我要使用的。你的问题是什么?你的解决方案否定了从基础派生的观点,不是吗。因为不再有公共基类,多态性也不起作用。