Мне нужно создать функцию в C ++, которая возвращает результат с другим типом на основе строкового аргумента, который он получает
Вы не можете. Функция всегда возвращает объект одного типа (или ссылку или void
), который не может зависеть от аргументов. Если вы попытаетесь написать вызов такой функции и использовать возвращаемое значение, вы поймете, почему это принципиально не работает на языке со статической типизацией:
const char* type = get_some_type();
??? variable = f(type);
Какой тип будет использовать вместо ???
? Вы не можете использовать float
, потому что тип ввода и, следовательно, возвращаемый тип может быть "int"
на этом гипотетическом языке. Вы также не можете использовать int
, потому что тип возвращаемого значения может float
. auto
также не может помочь, потому что выводит тип из инициализатора. Невозможно вывести тип из чего-то неизвестного.
Перегрузки или специализации шаблонов могут иметь разные типы возврата между собой, но разрешение перегрузки происходит во время компиляции и, следовательно, не может зависеть от значений времени выполнения, таких как строки. .
Что вы можете сделать, это вернуть теговое объединение, такое как std::variant
потенциальных типов возврата. Но вам нужно писать каждый случай явно, если вы не хотите использовать метапрограммирование вне языка. Это явное повторение может стать ненужным в будущем, если в язык будут введены соответствующие функции отражения.