Возможно ли в C ++ иметь два класса, давайте назовем их A
и B
, так что A
имеет функцию-член f
, которая возвращает объект класса B
и B
имеет функцию-член g
, которая возвращает объект класса A
?
(текст ниже только для того, чтобы показать, что я «сделал домашнее задание».)
Проблема заключается только в том, как написать сигнатуры этих функций, когда в первом определенном классе будет иметь неполный тип возвращаемого значения. Форвардные объявления здесь не помогают, потому что объекты возвращаются по значению.
Да, я знаю все обходные пути (дружественные глобальные функции, возвращаемые по указателю, ...), но я просто хотел бы знать, может ли интерфейс, описанный выше, быть реализован в C ++. Для примера скажем, что я пытаюсь перегрузить operator () для класса A
, чтобы вернуть B
, и для класса B
, чтобы вернуть A
. Поскольку я перегружаю операторы, я должен возвращать по значению (ну, если я не хочу, чтобы ад динамического размещения :), а () должен быть перегружен как функция-член, поэтому я не могу использовать глобальных друзей.