返回与C++中的类相同的类型

Return same type as class in C++

本文关键字:类型 返回 C++      更新时间:2023-10-16

我想要一个C++类方法来返回对同一类对象的引用。这也适用于派生类。在下面的例子中,我只是简单地将"A*"作为函数的返回类型,但当使用类B时,这显然是一个问题。

class A {
public:
    A* self() { return this; };
};
class B: public A {
};
int main(int argc, char **argv) {
    A* a1 = new A;
    B* b1 = new B;
    A* a2 = a1->self();
    B* b2 = b1->self();
}

编译器抱怨

class.cpp:在函数"int main(int,char**)"中:class.cpp:16:错误:
从"A*"到"B*"的转换无效

在Objective-C中,我会使用instanceof特殊类型作为返回类型。对于这样的问题,有什么类似于C++或任何已知模式的用法吗?

我想您需要"返回类型放松"(注意virtual):

struct A {
    virtual A* self() { return this; };
};
struct B: A {
    B* self() { return this; };
};

你也可以考虑这个问题此语言功能专门针对类的并行层次结构(clone是特殊情况)

的情况而引入

转换确实无效。对于这样的转换,您需要投射:

B* b2 = static_cast<B*>( b1->self() );

但正确的方法是通过适当的设计或重构来避免陷入这种情况。