Ordem de expansão do pacote de parâmetros
Eu tenho 2 funções para ler arquivos binários.
1ª função lêsizeof(T)
bytes do arquivo:
template<typename T>
T read() { ... some IO operations ... };
A segunda função chama primeiro uma várias vezes com cada parâmetro do modelo:
template<typename... Ts>
std::tuple<Ts...> read_all() {
return std::make_tuple(read<Ts>()...);
};
Tudo funciona bem, exceto a primeira ordem de chamada de função. Para algo como
uint32_t a;
uint8_t b;
std::tie(a, b) = read_all<uint32_t, uint8_t>();
o primeiro será chamadoread<uint8_t>()
e depois dissoread<uint32>()
que inverte a ordem de passagem dos parâmetros do modelo e atrapalha a ordem dos bytes no arquivo.
Claro, eu posso ligarread_all
com argumentos de ordem inversa dos modelos e obter a ordem correta no final, mas existe uma maneira mais óbvia de fazer isso?