Есть набор типов
typedef ... Type;
typedef ... TypeA;
typedef ... TypeB;
typedef ... TypeC;
Есть функция, которая может возвращать значения различных типов.
Type Get(const char *sz);
Нужно инициализировать переменные различных типов
TypeA A;
TypeB B;
TypeC C;
Обычно, я делал так:
// Способ 1
A=(TypeA)Get("A");
B=(TypeB)Get("B");
C=(TypeC)Get("C");
Но вот, в чужом коде увидел такой прием:
// Способ 2
(Type&)A=Get("A");
(Type&)B=Get("B");
(Type&)C=Get("C");
Какой способ лучше?
Способ 1, на мой взгляд, интуимтивно понятнее.
Его недостаток — требуется следить, куда кастить каждое значение, и не ошибиться при этом.
Если названия типов TypeA, TypeB ... имеют разную длину, то код неаккуратно выглядит.
Способ 2 интуимтивно менее понятен, но, как мне кажется лучше читаем, так как четко видна основная цель выпажения:
A=Get("A").
Не нужно следить за типами: все значения кастятся в один ти тот же тип.
И оформление кода получается более аккуратным
И все же, какой способ предпочтительнее?