今天,我遇到了一个问题,我有一个元组向量,其中元组可能包含多个条目。现在,我想将我的元组向量转换为对象向量,使得元组的条目与对象的统一初始化完全匹配。
下面的代码可以完成任务,但它有点笨拙。我在想是否可能推导出通用解决方案,如果元组恰好与对象的统一初始化顺序相匹配,则可以构造对象。
当要传递的参数数量增加时,这可能是非常理想的功能。
下面的代码可以完成任务,但它有点笨拙。我在想是否可能推导出通用解决方案,如果元组恰好与对象的统一初始化顺序相匹配,则可以构造对象。
当要传递的参数数量增加时,这可能是非常理想的功能。
#include <vector>
#include <tuple>
#include <string>
#include <algorithm>
struct Object
{
std::string s;
int i;
double d;
};
int main() {
std::vector<std::tuple<std::string, int, double>> values = { {"A",0,0.},{"B",1,1.} };
std::vector<Object> objs;
std::transform(values.begin(), values.end(), std::back_inserter(objs), [](auto v)->Object
{
// This might get tedious to type, if the tuple grows
return { std::get<0>(v), std::get<1>(v), std::get<2>(v) };
// This is my desired behavior, but I don't know what magic_wrapper might be
// return magic_wrapper(v);
});
return EXIT_SUCCESS;
}
std::transform
成为了一个std::copy
。 - Aleph0std::tuple
布局。这个模板被称为“参数包”(parameter pack)。std::tie
构建了一个引用元组,使得赋值成为可能。 - Stack Danny