Начиная с 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, я не могу сделать это в теле конструктора.
Не используется структурированное связывание, но вы можете иметь приватный конструктор, принимающий std :: pair и инициализировать consts. Затем пусть ваш конструктор по умолчанию делегируется этому конструктору с результатом вашей функции.
Других решений пока нет …