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

Initialization of multiple members using multiple return value

本文关键字:成员 初始化 返回值      更新时间:2023-10-16

从 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";
}

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

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;
};

我知道,由于语法的原因,这不起作用。我也知道我可以将所有值存储在X中的适当std::pair成员中,并制作使丑陋的std::get<N> ()语法过载的 getter,但是有什么方法可以用单个init()函数初始化多个成员?由于这些成员是常量,因此我无法在构造函数的主体中执行此操作。

不使用结构化绑定,但你可以让一个私有构造函数采用 std::p air 并初始化常量。然后,将默认构造函数委托给该构造函数,其中包含函数的结果。