Два производных класса, возвращающие друг другу тип в методе - PullRequest
0 голосов
/ 16 марта 2019

У меня похожая ситуация:

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; };
}

Так что эти классы должны знать определения друг друга, чтобы возвращать надлежащие типы, как бы я решил проблему такого типа? Мне нужны эти методы для возврата типов (не указателей), потому что это требование интерфейса.

1 Ответ

2 голосов
/ 16 марта 2019

Это можно сделать, но не с помощью встроенных объявлений функций.

Оба класса должны объявлять друг друга вперед, в своих заголовочных файлах, то есть:

class D2;

class D1 : B {
    D2 conversion_method();
}

и

class D1;

class D2 : B {
    D1 conversion_method();
}

Затем где-нибудь, в каком-то третьем заголовочном файле или в каком-либо файле .cpp, который должен включать оба заголовочных файла, вы можете определить оба conversion_method (), поскольку теперь доступны определения обоих классов.

При некотором хитром использовании дополнительных #include s и обработке макросов препроцессора можно было бы упорядочить вещи так, чтобы, как только оба заголовочных файла получили #include d, это привело к обеим реализациям conversion_method() определяется автоматически.Для этого каждый заголовочный файл имеет #define что-то, а затем #include третий заголовочный файл.Третий заголовочный файл проверяет, существуют ли оба #define, и продолжает и определяет оба conversion_method ().Это эффективно выполняет то же, что и ваше первоначальное намерение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...