【发布时间】:2017-06-22 05:09:22
【问题描述】:
我有两个函数可以读取二进制文件。
第一个函数从文件中读取sizeof(T) 字节:
template<typename T>
T read() { ... some IO operations ... };
第二个函数使用每个模板参数多次调用第一个函数:
template<typename... Ts>
std::tuple<Ts...> read_all() {
return std::make_tuple(read<Ts>()...);
};
除了第一个函数调用顺序外,一切正常。对于类似的东西
uint32_t a;
uint8_t b;
std::tie(a, b) = read_all<uint32_t, uint8_t>();
第一个将被称为read<uint8_t>(),然后是read<uint32>(),它颠倒了传递模板参数的顺序并混淆了文件中的字节顺序。
当然,我可以调用 read_all 以颠倒模板参数的顺序并最终得到正确的顺序,但是有没有更明显的方法呢?
【问题讨论】:
标签: c++ templates io variadic-templates