我遇到过类似的情况:
B.hpp
class B {...};
D1.hpp
class D1 : B {
D2 conversion_method(){ D2 d2(); ... return d2; };
}
D2.hpp
class D2 : B {
D1 conversion_method(){ D1 d1(); ... return d1; };
}
所以这些类需要知道彼此的定义才能返回正确的类型,我将如何解决此类问题?我需要这些方法来返回类型(而不是指针),因为这是接口(interface)要求。
最佳答案
这可以做到,但不能使用内联函数声明。
两个类都需要在它们的头文件中相互转发声明,即:
class D2;
class D1 : B {
D2 conversion_method();
}
和
class D1;
class D2 : B {
D1 conversion_method();
}
然后,在某处,在某个第三个头文件或某个必须包含两个头文件的 .cpp
文件中,您可以定义两个 conversion_method
(),因为两者类的定义现在可用。
巧妙地使用额外的 #include
和预处理器宏处理,可以安排一些事情,以便一旦两个头文件都得到 #include
d,这导致 conversion_method
() 的两个实现都被自动定义。这是通过让每个头文件 #define
一些东西,然后 #include
第三个头文件来完成的。第三个头文件检查两个 #define
是否存在,然后继续并定义两个 conversion_method
()。这有效地完成了与您的初衷相同的事情。
关于c++ - 两个派生类在方法中返回彼此的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55198107/