c++ - dynamic_cast inside 派生构造函数

标签 c++ dynamic-cast

我有一个基类和派生类,还有一个 BaseType 和 DerivedType。在基类上我有一个 BaseType 的对象(不是指针)。 我希望 Derived 类的构造函数执行从 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 类上,我有一个 BaseType 的对象(不是指针)

我需要在 Derived 类的构造函数中将此对象的类型更改为 DerivedType 我的老板告诉我使用 dynamic_cast

我需要这样做,因为如果我要使用 class C : public Derived

当我使用“basetype”时,它将自动为 DerivedType 而不是 BaseType

最佳答案

您不能更改成员basetype的类型,无论是使用dynamic_cast还是任何其他方式。
如果你的老板告诉你这样做,他们要么是大错特错,要么没有足够清楚地传达你应该做什么。我建议您要求澄清。

一种常见的实现方法(即类型依赖于子类的成员)是将基类转换为模板,将成员的类型作为参数传递:

template<typename MemberType = BaseType>  // Default type is BaseType
class Base{
    MemberType something;
}

class Derived : public Base <DerivedType>
{
      Derived()
      {
          // 'something' has type DerivedType
      }
};

关于c++ - dynamic_cast inside 派生构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27251856/

相关文章:

c++ - 从模板函数中缓存一个基类型以在 std::is_base_of<Here!,> 中使用

c++ - 如何从 std::exception 动态转换为 std::nested_exception?

c++ - OpenMP 并行等待

c++ - 具有源子目录的单个顶级 makefile

c++ - 归并排序算法辅助

c++ - 对象 std::shared_ptr 是否可以通过它的 std::weak_ptr 找到?

c++ - 为处理器执行除法和取模的最佳方法是什么?

c++ - 在条件中更改对象类型

c++ - 来自 "void *"的 dynamic_cast

c++ - 不完整的类 : Convert void* to pointer to class type via dynamic_cast