C++ 动态_-cast在dervied构造函数中

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(){

我有一个基类和派生类,还有一个BaseType和DerivedType。在基类上,我有一个BaseType的对象(不是指针)。 我希望在派生类的构造函数上执行从BaseType到DerivedType的动态转换

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。我想我需要动态施法,因为这是梅老板告诉我要使用的。你的问题是什么?你的解决方案否定了从
基础派生的观点,不是吗。因为不再有公共基类,多态性也不起作用。