Нет .
Невозможно использовать параметр, связанный во время выполнения (например, параметр функции), чтобы действовать в качестве параметра шаблона, потому что такие должны быть связаны во время компиляции.
Но давайте на секунду представим, что это было:
Record<Apple, Orange> fruitBasket;
Тогда мы бы получили:
decltype(fruitBasket[0])
равно Apple
decltype(fruitBasket[1])
равно Orange
разве здесь что-то вас не беспокоит?
В C ++ сигнатура функции определяется типами его аргументов (и, необязательно, значений параметров шаблона).Тип возврата не учитывается и не участвует (в лучшую или в худшую сторону) в разрешении перегрузки.
Поэтому функция, которую вы пытаетесь создать, просто не имеет смысла.
Теперь,у вас есть две альтернативы:
- требуют, чтобы все аргументы наследовали или могли быть преобразованы в общий тип, и возвращали этот тип (что позволяет предлагать не шаблонную функцию)
- embraceшаблонов и требуют, чтобы ваши пользователи специально указывали индекс типа, который они хотят использовать
Я не знаю (и не могу), какой вариант предпочтительнее в вашей конкретной ситуации, у вас будет выбор дизайнасделать.
Наконец, я отмечу, что вы можете рассуждать на слишком низком уровне.Ваши пользователи действительно должны будут получить доступ к каждому полю независимо?Если они этого не делают, вы можете предоставить средства для применения функций (посетителей?), Например, к каждому элементу.