Правила C ++ обычно не допускают того, что вы запрашиваете.
Структура - это набор значений известных типов, доступ к которым осуществляется по имени, которое должно быть предоставлено во время компиляции.Эта последняя часть имеет решающее значение, поскольку она позволяет компилятору C ++ знать, о каком значении вы говорите.
A tuple
представляет собой набор значений известных типов, доступ к которым осуществляется по номеру ..Однако то, что это число, не означает, что оно может быть числом, определяемым во время выполнения, так же как наличие строкового имени для члена структуры не означает, что вы можете получить этот член во время выполнения.
Каждый членtuple
набрано, и C ++ должен знать типы вещей во время компиляции, чтобы функционировать.Точно так же, тип возврата любой функции известен во время компиляции; не может меняться в зависимости от значения параметра.Вы можете выбрать другую функцию в зависимости от типа (перегрузка функции или вычет аргумента шаблона), но она не может быть основана на значении, потому что значения (если они не являются константами времени компиляции) известны только во время выполнения.
Чтобы сделать то, что вы хотите, вам придется каким-то образом сломать систему типов C ++.Например, теоретически у вас может быть функция get
, которая возвращает указатель без типа.Или, если вы хотите хоть какую-то претензию на безопасность типов, возможно, boost::any
или boost::variant
типов tuple
.Но это самое лучшее, что вы сможете сделать.
Даже если вы укажете тип во время компиляции (get<Type>
), этого все равно недостаточно, из-за возможности несоответствия типов.Что вы тогда делаете?
Эта концепция просто не будет работать на типизированном языке времени компиляции, таком как C ++.