我遇到的情况与此类似:
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; };
}
所以这些类需要知道彼此的定义才能返回正确的类型,我将如何处理此类问题?我需要那些方法来返回类型(而不是指针),因为这是接口的要求。
答案 0 :(得分:2)
这可以完成,但是不能使用内联函数声明。
两个类都需要在其头文件中相互转发声明,即:
class D2;
class D1 : B {
D2 conversion_method();
}
和
class D1;
class D2 : B {
D1 conversion_method();
}
然后,在必须包含两个头文件的第三个头文件或某个.cpp
文件中的某个位置,您可以定义两个conversion_method
(),因为这两个类的定义现已可用。
通过巧妙地使用其他#include
和预处理程序宏处理,可以安排事情,以便一旦两个头文件都获得#include
d,就可以实现{{ 1}}()会自动定义。这是通过使每个头文件conversion_method
和之后的#define
第三个头文件来完成的。第三个头文件检查两个#include
是否都存在,然后继续并定义两个#define
()。这样可以有效地完成与您的初衷相同的事情。