我想要一个 C++ 类方法来返回对同类对象的引用。这也适用于派生类。在下面的示例中,我简单地将“A*”作为函数的返回类型,但这在使用类 B 时显然是一个问题。
\n\nclass A {\npublic:\n A* self() { return this; };\n};\n\nclass B: public A {\n\n};\n\nint main(int argc, char **argv) {\n A* a1 = new A;\n B* b1 = new B;\n\n A* a2 = a1->self();\n B* b2 = b1->self();\n}\nRun Code Online (Sandbox Code Playgroud)\n\n编译器抱怨
\n\n\n\n\nclass.cpp:在函数 \xe2\x80\x98int main(int, char**)\xe2\x80\x99 中:class.cpp:16: 错误:
\n
\n 来自 \xe2\x80\x98A*\xe2\ 的无效转换x80\x99 到 \xe2\x80\x98B*\xe2\x80\x99
在 Objective-C 中我会使用instanceof\n 特殊类型作为返回类型。对于此类问题,是否有类似于 C++ 中使用的内容或任何已知模式?
我想你需要“返回类型放松”(注意virtual):
struct A {
virtual A* self() { return this; };
};
struct B: A {
B* self() { return this; };
};
Run Code Online (Sandbox Code Playgroud)
您也可以考虑这个问题
这个语言功能专门针对具有并行类层次结构的情况而引入(clone是特殊情况)