c++ - 两个派生类在方法中返回彼此的类型

标签 c++ inheritance types

我遇到过类似的情况:

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 和预处理器宏处理,可以安排一些事情,以便一旦两个头文件都得到 #included,这导致 conversion_method() 的两个实现都被自动定义。这是通过让每个头文件 #define 一些东西,然后 #include 第三个头文件来完成的。第三个头文件检查两个 #define 是否存在,然后继续并定义两个 conversion_method()。这有效地完成了与您的初衷相同的事情。

关于c++ - 两个派生类在方法中返回彼此的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55198107/

相关文章:

c++ - 将 WAV 文件音频输入转换为纯 ASCII 字符

c++ - 成员函数中的问题

c++ - 如何限制构造生命周期更长的对象所需的变量范围?

java - 从父类(super class)访问私有(private)变量 (JAVA)

vb.net - 为什么使用 Type.Equals(t1, t2) 而不是相等运算符?

c++ - 获取 C++ 中运算符的返回类型?

inheritance - 如何检测对象中分配给 Dart 基类变量的接口(interface)?

Java继承: How to remove items from an ArrayList depending on a property which is not owned by all of the items?

haskell - 与分数相关的类型错误

Symfony Forms - 如何更改 CollectionTypes 项目标签