我有一个通用的IDetachable接口,它提供了一种方法:
template<class T>
class IDetachable {
public:
virtual T detached() const = 0;
};
我有以下示例类:
class A: public IDetachable<A> {
virtual A detached() const override {
// some implementation which returns a detached A object
}
};
继承B时出现问题:
class B: public A, public IDetachable<B> {
virtual B detached() const override {
// some implementation which returns a detached B object
}
};
clang ++告诉我:
error: virtual function 'detached' has a different return type ('B')
than the function it overrides (which has return type 'A')
在我看来,编译器会自动为override关键字选择第一个父对象。有没有机会用override关键字告诉编译器我打算继承哪个父方法?
您可以传递一个虚拟T来分离:
template<class T>
class IDetachable {
public:
virtual T detached(T*dummy) const = 0;
};
您可以忽略该参数,但是现在可以专注于该参数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句