Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C++;,我可以从std::variant中移出一些内容吗?_C++_Stl_Std Variant - Fatal编程技术网

C++ 在C++;,我可以从std::variant中移出一些内容吗?

C++ 在C++;,我可以从std::variant中移出一些内容吗?,c++,stl,std-variant,C++,Stl,Std Variant,我有一个不可复制但可移动的资源包装器类。类似这样的东西(伪代码) 这一切都很好,但是我有很多这样的函数,我有一个函数,它解析一些数据并返回一个包装器或另一个包装器。我想用std::variant来表示返回值。例如 std::variant<Wrapper, AlternativeWrapper> LoadData(void* bytes, size_t len) { ... } 我的代码看起来像这样 auto result = LoadData(bytes, len); std::

我有一个不可复制但可移动的资源包装器类。类似这样的东西(伪代码)

这一切都很好,但是我有很多这样的函数,我有一个函数,它解析一些数据并返回一个包装器或另一个包装器。我想用
std::variant
来表示返回值。例如

std::variant<Wrapper, AlternativeWrapper> LoadData(void* bytes, size_t len)
{ ... }
我的代码看起来像这样

auto result = LoadData(bytes, len);
std::get<Wrapper>(result);
auto result=LoadData(字节,len);
std::get(结果);

这是有道理的,因为结果仍然存在,但我如何访问它呢?

哎呀,我在发布问题两分钟后就解决了这个问题

您可以
std::将变量移动到
std::get

auto v = LoadData(bytes, len);
std::get<Wrapper>(std::move(v));
auto v=LoadData(字节,len);
std::get(std::move(v));
或者直接内联它,使变量成为临时右值

std::get<Wrapper>(LoadData(bytes, len));
std::get(LoadData(bytes,len));

[更新:]我原本说std::move破坏了原始变体,但正确地更正了它没有。。。然而,实际发生的情况是,变量内部的包装在移出时被破坏,这是意料之中的

在显示的代码中没有复制。您是否正在使用std::get(result)的结果进一步?“这会破坏原始变体”:它不会。它只是返回对元素的右值引用,而不是左值引用。它对变体没有任何作用。
auto v = LoadData(bytes, len);
std::get<Wrapper>(std::move(v));
std::get<Wrapper>(LoadData(bytes, len));