理论上是否可以添加语言功能以将结构解压到函数实际参数列表中?我的意思是以下内容。
template< typename ...Ts >
void f(Ts... values) { (std::cout << ... << values) << std::endl; }
struct S { int a; char c; double d; };
S s{1, '2', 3.0};
f([s]);
void g(int, int, int) {}
g([s]); // warning about narrowing conversion
void h(int &, int &, int &) {}
h([s]); // hard error ("cannot bind to...")
Run Code Online (Sandbox Code Playgroud)
处理成员数量未知的合适结构会很方便。因为由于缺乏模板上下文,当前的结构化绑定无法“解压”未知数量的组件(例如 )的结构,而模板上下文只能处理可变数量的类型/值。auto... [x] = s;operator ...
这种方式有什么缺点?
因此,从div函数返回的成员的顺序似乎是实现定义的.
是quot1 日成员或者是rem?
让我们说我做的是这样的:
generate(begin(digits), end(digits), [i = div_t{ quot, 0 }]() mutable {
i = div(i.quot, 10);
return i.rem;
})
Run Code Online (Sandbox Code Playgroud)
当然这里的问题是我不知道我是初始化i.quot还是i.rem在我的lambda捕获中.是否i采用div(quot, 1)唯一的跨平台方式来实现这一目标?