“BaseChild<BaseParent>*”和“DerivedChild<DerivedParent>*”之间的不匹
Mismatched type error between `BaseChild<BaseParent>*` and `DerivedChild<DerivedParent>*`
我很难为这个问题想出一个好名字,我为此道歉。 如果阅读后您有更好的名字,请告诉我。 无论如何,我有一些类似于以下内容的代码:
// BaseFamily.h
template<typename T>
class BaseChild {
T parent;
}
class BaseParent {
virtual BaseChild<BaseParent>* createChild() = 0;
}
.
// DerivedFamily.h
class DerivedParent;
class DerivedChild: public BaseChild<DerivedParent> {}
class DerivedParent
: public BaseParent
{
BaseChild<BaseParent>* createChild() override {
return new DerivedChild();
// error: Cannot initialize return object of type 'BaseChild<BaseParent> *' with an rvalue of type 'DerivedChild *'
}
}
上面是两组父>
这似乎至少应该接近于作为指向 BaseChild 的指针应该能够处理指向 DerivedChild 的指针,但这些似乎不能与我所知道的任何语法互换。
把它放在一个问题中:我怎样才能使返回类型BaseChild<BaseParent>*
的函数允许DerivedChild<DerivedParent>*
?
编辑:我可能已经找到了一个线索派生模板类。 但CRTP似乎并不能解决这个问题。
class BaseParent; // forward declaration
class BaseChild{
public:
BaseChild(BaseParent* parent_)
:parent(parent_)
{}
BaseParent* parent;
}
class BaseParent {
virtual BaseChild* createChild() = 0;
}
class DerivedParent;
class DerivedChild: public BaseChild {
public:
DerivedChild(DerivedParent* parent)
:BaseChild(parent)
{}
}
class DerivedParent
: public BaseParent
{
BaseChild* createChild() override {
return new DerivedChild();
}
}
我不知道这个问题的上下文,所以我不确定这是否有帮助。
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 类与私有变量的其他类之间的线程安全性
- 如何在cpp文件之间切换窗口?在Qt中
- 线程之间的布尔停止信号
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 构造函数和转换运算符之间的重载解析
- “BaseChild
*”和“DerivedChild *”之间的不匹