I have 2 functions to read binary file.
1st function reads sizeof(T)
bytes from file:
template<typename T>
T read() { ... some IO operations ... };
2nd function calls first one multiple times with each template parameter:
template<typename... Ts>
std::tuple<Ts...> read_all() {
return std::make_tuple(read<Ts>()...);
};
Everything works fine except of 1st function call order. For something like
uint32_t a;
uint8_t b;
std::tie(a, b) = read_all<uint32_t, uint8_t>();
the first will be called read<uint8_t>()
and after that read<uint32>()
which reverses order of passing template parameters and messes up with order of bytes in file.
Sure, I can call read_all
with reversed order of template arguments and get right order in the end, but is there a more obvious way to do so?