Как получить тип члена класса переменной неизвестного типа? Что должно быть вместо type_of.

auto v = get_container();
type_of(v)::value_type x;

По причинам ремонтопригодности я хотел бы использовать auto, чтобы при изменении типа возвращаемого значения get_container ничего не сломалось.

1
quantum_well 19 Май 2014 в 18:54

2 ответа

Лучший ответ

У меня сложилось впечатление, что вы ищете:

decltype(v)::value_type x;

decltype - очень мощный инструмент из C ++ 11. Ознакомьтесь с его документацией.

6
lrineau 19 Май 2014 в 15:09

Если вы хотите сделать свой код более удобным для сопровождения, я бы не согласился с использованием как auto, так и decltype. Если вы хотите придерживаться привязки метода времени компиляции и избегать виртуальных методов и интерфейсов из-за критических по времени частей кода, я бы предпочел иметь typedef с описательным именем того, для чего предполагается использовать этот контейнер, и использовать это определенный тип. В случае изменений позже вам просто нужно будет изменить typedef.

По моему собственному опыту, чем больше «авто» в вашем коде, тем менее читабельным он становится.

2
user2511124 19 Май 2014 в 15:53