Вам не нужно создавать собственную структуру для возврата двух значений - вы можете использовать std :: pair.В этом случае нет большой синтаксической нагрузки при возврате двух значений.Это решение имеет проблему, заключающуюся в том, что «.first» и «.second» не очень описательные имена, но если используемые типы и имя функции проясняют намерение достаточно ясно, то это не обязательно проблема.1002 * Если вы используете C ++ 0x, вы можете использовать unique_ptr вместо auto_ptr, и вызывающая сторона может использовать auto вместо необходимости вводить более длинный std :: pair,Если вы не используете C ++ 0x, вы можете использовать вместо этого typedef.
Если вы вернете два значения, у вас не будет места для bool.Вы можете использовать кортеж C ++ 0x для возврата всех трех значений.Вы также можете указать ошибку, выбрасывая исключение или возвращая нулевые указатели.Я бы предпочел исключение, предполагая, что ошибка редкая / исключительная.
Как указывали другие ответы, часто предпочтительно иметь две отдельные функции, каждая из которых возвращает один объект.Если вы не можете сделать это, потому что инициализация двух объектов неразрывно связана, то вы можете создать класс, который инкапсулирует инициализацию.Вы можете передать необходимую информацию, чтобы сделать два объекта конструктору (требуется исключение для сигнализации об ошибках), а затем иметь два метода для этого класса, каждый из которых возвращает один объект.