从模板基类派生的类的隐式强制转换
Implicit cast of class derived from template base class
我遇到了隐式强制转换、模板和从模板类继承的问题。以下是我从我的项目中提取的内容,我遗漏了一些类甚至是抽象的,但这与案例无关。
class A {};
class B : public A {};
template <typename T> class Base {};
class Derived : public Base<B> {};
int main() {
Derived d;
Base<A>* base = new Derived();
}
基本上,我有一个从中派生Derived : public Base<B>
的模板基类Base
。然后,我必须将其转换为最常见的Base形式,即Base<A>
。
我本以为我可以将从Base<B>
派生的Object隐式转换为Base<A>
,就像B
从A
派生一样。我做错了什么吗?或者我怎么能隐式地投射?这一点很重要,因为我需要接受Base
方法中所有类型的派生类作为参数。
提前谢谢。
这是不可能的。无论A和B之间的关系如何,Base<A>
与Base<B>
都没有关系。
Base<B>
不一定需要与Base<A>
有关系。这与Derived
无关。如果你想强制建立这样的关系,你需要一个模板化的构造函数。
template <typename T>
class Base
{
template <typename TOther>
Base(const TOther& that)
{
// ...
}
// ...
};
显然,实现必须取决于Base
的实际实现。请注意,此构造函数不能替代普通的复制构造函数。
相关文章:
- 从基类实例调用派生类方法而不进行强制转换
- C++将派生类转换为基类时'object slicing'期间发生的情况
- 派生类(构造函数具有参数)和基类(构造函数缺少参数)之间没有可行的转换
- 调用不在基类中的派生类函数而不进行动态强制转换,以最大程度地提高性能
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 我们可以在不知道其真实类型的情况下将基类指针转换为派生类指针吗?
- 从未使用过到基类的转换
- 基类到派生类的强制转换向量
- 有没有办法复制派生类指针的向量而不将其强制转换为基类?
- 为什么此代码不将基类强制转换为 c++ 中的派生类?
- 如何在运行时将指向派生类的 void* 正确转换为指向基类的 void*
- 从基类的共享指针向下转换到派生类的引用
- 为了访问方法,从基类动态转换为派生类
- 派生类 插入和提取运算符重载以及基类与派生类之间的强制转换
- 将空基类优化对象强制转换为另一种类型是否会破坏严格的别名?
- 基类到派生模板类的强制转换指针,而不知道类型
- 带有基类指针的强制转换向量,指向子类
- 通过转换基类指针来设置派生类字段
- 强制转换基类问题
- 强制转换基类保护方法的返回指针的替代方法