我正在尝试使用 CRTP 实现 Clonable 类。但是,我需要有一个具有纯虚拟克隆方法的抽象类,并被子类覆盖。为了实现这一点,我需要克隆函数返回一个协变返回类型。我在下面编写了这段代码,编译器对我大喊这个错误:
main.cpp:12:5: error: return type of virtual function 'clone' is not covariant with the return type of the function it overrides ('B *' is not derived from 'AbstractClonable *')
“B”类似乎是 AbstractClonable 的子类,甚至有两种方式!我该如何解决这个问题?非常感谢你。我尝试使用 clang 3.6 和 GCC 4.9.2
struct AbstractClonable {
virtual AbstractClonable* clone() const = 0;
};
template<typename T>
struct Clonable : virtual AbstractClonable {
T* clone() const override {
return new T{*dynamic_cast<const T*>(this)};
}
};
struct A : virtual AbstractClonable {
};
struct B : A, Clonable<B> {
};