Я пытаюсь создать переменную функцию шаблона, которая считывает элементы по порядку (с индексом). Цель состоит в том, чтобы вызвать функцию read_tuple для чтения двух int с идентификаторами 0 и 1 (с read_int (0) и read_int (1)).Вариант расширения шаблона шаблона Variadic id
Вот код, я до сих пор:
int data[] = {10,20,30,40};
int int_read(int id)
{
return data[id];
}
template <typename T>
T read(int& index)
{
index--;
int value = int_read(index);
std::cout << "index :" << index << " value: " << value << std::endl;
return value;
}
template <typename... Args>
std::tuple<Args...> read_tuple()
{
int index = sizeof...(Args);
return std::tuple<Args...>(read<Args>(index)...);
}
Я могу назвать это так:
auto tuple = read_tuple<int, int>();
std::cout << "First: " << std::get<0>(tuple) << std::endl;
И я получаю следующий результат:
index :1 value: 20
index :0 value: 10
First: 10
Однако, этот код зависит от порядка оценки функции чтения. Как я могу генерировать индекс, зависящий от расширения пакета (чтобы избежать неопределенного поведения)?
с помощью рамно-Init-список 'станд :: кортеж {читать (индекс) ...}' вы гарантированно исполнение в порядке их появления (т.е. слева направо) –