我试图打开一个元组,并使用结果分配给成员。在惯用的C++17中可以做到这一点吗?
我意识到std::tie是存在的,但我试图利用C++17特性,而不是默认使用旧特性或旧方式(std::get<N>(tuple))。
tuple<A, vector<A>> IO(){
//IO happens here
return {var, vec};
}
class foo{
public:
foo();
private:
A var;
vector<A> vec;
};
foo::foo(){
//this line here: I want to assign var and vec from IO()
[var, vec] = IO();
}发布于 2019-03-13 20:11:56
不怎么有意思。结构化绑定只能声明新名称,不能分配给现有名称。
最好就是这么做:
foo() : foo(IO()) { } // delegate to a constructor, calling IO
foo(std::tuple<A, vector<A>>&& tup) // manually unpack within this constructor
: var(std::get<0>(std::move(tup)))
, vec(std::get<1>(std::move(tup)))
{ }如果A碰巧是默认的可构造且可移动的,那么是的,这也是可行的:
foo() {
std::tie(var, vec) = IO();
}如果A碰巧不是默认可构造的,那么您可以使用optional添加额外的状态:
struct foo {
std::optional<A> var;
std::vector<A> vec;
foo() {
std::tie(var, vec) = IO();
}
};这些都不是特别伟大的。
https://stackoverflow.com/questions/55150392
复制相似问题