gpt4 book ai didi

c++ - 如何创建一个新变量并同时在 std::tie 中使用它?

转载 作者:IT老高 更新时间:2023-10-28 12:53:27 28 4
gpt4 key购买 nike

有没有一种使用 std::tie 并一次性创建新变量的好方法?换句话说,如果一个函数返回一个 std::tuple 并且我们希望最终将结果分解为单独的组件,有没有办法在不预先定义变量的情况下进行这些赋值?

例如,考虑以下代码:

#include <tuple>

struct Foo {
Foo(int) {}
};
struct Bar{};

std::tuple <Foo,Bar> example() {
return std::make_tuple(Foo(1),Bar());
}

int main() {
auto bar = Bar {};

// Without std::tie
{
auto foo_bar = example();
auto foo = std::get<0>(std::move(foo_bar));
bar = std::get<1>(std::move(foo_bar));
}

// With std::tie
#if 0
{
// Error: no default constructor
Foo foo;
std::tie(foo,bar) = example();
}
#endif

}

基本上,example 函数返回一个元组。我们已经有一个类型为 Bar 的变量要赋值,但我们需要一个类型为 Foo 的新变量。如果没有 std::tie,我们不需要创建 Foo 的虚拟实例,但代码要求我们将所有内容放入 std::tuple 先分,再分。使用 std::tie,我们必须首先分配一个虚拟的 Foo,但我们没有默认构造函数来执行此操作。真的,我们假装 Foo 的构造函数很复杂,所以首先创建一个虚拟值是不可取的。最终,我们只想同时为 foobar 赋值,但希望同时为 Foo 分配内存时间。

最佳答案

此功能称为 structured bindings在 C++17 中。非常欢迎添加!

示例用法:

#include <iostream>
#include <tuple>

int main()
{
auto tuple = std::make_tuple(1, 'a', 2.3);

// unpack the tuple into individual variables declared at the call site
auto [ i, c, d ] = tuple;

std::cout << "i=" << i << " c=" << c << " d=" << d << '\n';

return 0;
}

在 GCC 7.2 中使用 -std=c++17 测试。

关于c++ - 如何创建一个新变量并同时在 std::tie 中使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29312154/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com