dynamic_cast派生构造函数内部
dynamic_cast inside dervied constructor
我有一个基类和派生类,还有一个基类型和派生类型。 在基类上 我有一个 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
类上,我有一个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
}
};
非常重要的一点:一旦一个对象被构造出来,它的类型是固定的,无论如何都无法更改。 如果Base
有成员命名为 basetype
,该对象由 Base
,在任何派生类可以访问它之前,以及它的类型对象是在Base
中声明的内容,并且永远不能更改。您可以在其上使用dynamic_cast
(例如 dynamic_cast<DerivedType&>
),但这个演员阵容肯定会失败。
目前尚不清楚您要实现的目标。 也许是某种变体策略模式就是您正在寻找的,其中Base::basetype
是对传递给 Base::Base()
的对象的指针或引用 Derived::Derived()
. 或者这真的是basetype
的价值哪个应该改变,这没有问题。 (这就是名字建议。 描述您要实现的目标,我们也许可以找到解决方案。
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 为什么从另一个构造函数内部调用C++构造函数不修改类变量?
- C++构造函数具有内部链接,但未定义 [-Wundefined-internal]
- 班级成员在C Lambdas中捕获内部构造函数
- 如何在类构造函数内部对同一类的成员函数启动pthread
- C++类的向量,不能在所述类的构造函数内部push_back
- 在shared_ptr的复制构造函数内部
- 如何正确地从运算符构造函数内部调用复制构造函数
- 我应该在类构造函数内部还是外部初始化shared_ptr
- "this"指针在构造函数内部指向什么C++?
- dynamic_cast派生构造函数内部
- 在boost::thread构造函数内部调用boost:;bind()时发生编译器错误
- 如何将文本文件中的信息读取到构造函数内部的动态数组中
- Try/catch块用于在构造函数内部将简单内存分配到公共原始指针
- 从重载复制构造函数内部调用默认复制构造函数
- 从复制构造函数外部修改对象成员时导致向量内存损坏,但从复制构造函数内部修改时不会
- 在构造函数内部初始化成员变量?(这应该是非常基本的)
- 构造函数内部"this" dynamic_cast
- 使用 gtest 测试构造函数内部条件的方法是什么?
- 正在构造函数内部初始化对象,而不在初始化列表中