Инициализация нескольких членов с использованием нескольких возвращаемых значений

Начиная с 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, я не могу сделать это в теле конструктора.

6

Решение

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

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]