使用多个返回值初始化多个成员

Art*_*zuk 6 c++ multiple-return-values c++17

从C++ 17开始我就能做到

std::pair<int, double> init () {
    return std::make_pair (1, 1.2);
}

void foo () {
    const auto [x, y] = init ();
    std::cout << x << " " << y << "\n";
}
Run Code Online (Sandbox Code Playgroud)

这很酷,但有什么办法可以一次初始化多个成员吗?我的意思是:

struct X {
    X () : [x, y] {read_from_file_all_values ()} {}

    std::pair<int, double> read_from_file_all_values () {
        // open file, read all values, return all
        return std::make_pair (1, 1.2);
    }

    const int x;
    const double y;
};
Run Code Online (Sandbox Code Playgroud)

我知道,由于语法原因,这不起作用.我也知道我可以将所有值存储在相应的std::pair成员里面X,并使getter过载丑陋的std::get<N> ()语法,但是有什么办法可以用单个init()函数初始化多个成员吗?由于这些成员是const,我不能在构造函数体中执行此操作.

woo*_*osh 5

不使用结构化绑定,但你可以有一个私有构造函数接受std :: pair并初始化consts.然后让你的默认构造函数委托给你的函数结果的构造函数.