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

7

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

我知道,这样做不起作用是因为语法的问题。我也知道我可以将所有值存储在适当的std::pair成员内,制作重载丑陋的std::get<N>()语法的getter,但是有没有办法使用单个init()函数初始化多个成员?由于这些成员是const,所以我不能在构造函数体中执行此操作。

你想如何存储这些值?你的结构提供了一个“int x”和一个“double y”。你是想在构建“X”时访问一个单独的pair,还是想在构建单个“X”时访问多对pairs? - dtell
我想要将它们分别存储,就像是 xy 但是它们的初始化由一个单一函数完成。 - Artur Pyszczuk
1个回答

5

如果不使用结构化绑定,但是您可以有一个私有构造函数,接受std::pair并初始化常量。然后让您的默认构造函数委托给此构造函数,并使用函数的结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接