使用多个 return 值初始化多个成员
Initialization of multiple members using multiple return value
从 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
成员中,并使 getter 重载丑陋的 std::get<N> ()
语法,但是有什么方法可以初始化多个成员单个 init()
函数?由于这些成员是 const 我不能在构造函数的主体中执行此操作。
不使用结构化绑定,但您可以让私有构造函数接收 std::pair 并初始化常量。然后让您的默认构造函数将您的函数结果委托给此构造函数。
从 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
成员中,并使 getter 重载丑陋的 std::get<N> ()
语法,但是有什么方法可以初始化多个成员单个 init()
函数?由于这些成员是 const 我不能在构造函数的主体中执行此操作。
不使用结构化绑定,但您可以让私有构造函数接收 std::pair 并初始化常量。然后让您的默认构造函数将您的函数结果委托给此构造函数。