小编Sem*_*rov的帖子

参数包扩展顺序

我有2个函数来读取二进制文件.

第一个函数sizeof(T)从文件中读取字节:

template<typename T>
T read() { ... some IO operations ... };
Run Code Online (Sandbox Code Playgroud)

第二个函数使用每个模板参数多次调用第一个:

template<typename... Ts>
std::tuple<Ts...> read_all() {
    return std::make_tuple(read<Ts>()...);
};
Run Code Online (Sandbox Code Playgroud)

除第一个函数调用顺序外,一切正常.喜欢的东西

uint32_t a;
uint8_t b;
std::tie(a, b) = read_all<uint32_t, uint8_t>();
Run Code Online (Sandbox Code Playgroud)

第一个将被调用read<uint8_t>(),之后read<uint32>()将反转传递模板参数的顺序,并在文件中以字节顺序混乱.

当然,我可以调用read_all模板参数的颠倒顺序并最终获得正确的顺序,但是有更明显的方法吗?

c++ io templates variadic-templates

5
推荐指数
1
解决办法
532
查看次数

标签 统计

c++ ×1

io ×1

templates ×1

variadic-templates ×1