Инициализация нескольких членов с использованием нескольких возвращаемых значений - PullRequest
0 голосов
/ 08 мая 2018

С 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 внутри X и создавать методы получения, которые перегружают уродливый синтаксис std::get<N> (), но есть ли способ инициализировать несколько элементов с помощью одной функции init()? Поскольку эти члены const, я не могу сделать это в теле конструктора.

1 Ответ

0 голосов
/ 08 мая 2018

Не используется структурированное связывание, но вы можете иметь приватный конструктор, принимающий std :: pair и инициализировать consts. Затем пусть ваш конструктор по умолчанию делегируется этому конструктору с результатом вашей функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...