Это можно сделать, но не с помощью встроенных объявлений функций.
Оба класса должны объявлять друг друга вперед, в своих заголовочных файлах, то есть:
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
().Это эффективно выполняет то же, что и ваше первоначальное намерение.