自C ++ 11以来,我们已经进行了汇总初始化:
DECLARE @Names VARCHAR(8000);
-- this may be tricky especially when ORDER BY is involved
SELECT @Names = COALESCE(@Names + ', ', '') + column_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'A' AND column_name LIKE 'DM_%';
DECLARE @sql NVARCHAR(MAX) = N'SELECT <cols> INTO B FROM A';
SET @sql = REPLACE(@sql, '<cols>', @Names);
PRINT @sql;
EXEC sp_executesql @sql;
但是为了这项工作:
struct S {
int count;
double value;
};
S s{2, 3.0};
我们需要无缘无故地手动编写一个构造函数:
vector<S> v;
v.emplace_back(2, 3.0);
我们还需要此构造函数才能使struct S {
int count;
double value;
S(int count, double value): count(count), value(value) {}
};
和optional(in_place, ...)
正常工作。
是否存在不手动编写此构造函数的解决方法?
它不会添加任何信息,只是重复已经存在的信息两次。同样,编译器也可以像编写聚合初始化那样自己编写它。
我能够在Egg的变体中添加新的构造函数,从而允许这样做,但我们可以做一些事情而无需修改容器的源代码吗?
编辑:该问题:Why doesn't emplace_back() use uniform initialization?与之相关,但没有提供解决方法。
答案 0 :(得分:0)
您至少有一个隐式构造函数。
plainto_tsquery
({std::vector<S> v;
v.emplace_back(S{2, 3.0});
和emplace_back
在这种情况下可以互换。)