foo(a, b, c); // ??? Does this work?
Нет, это не работает. Он создает временный объект и не может инициализировать переменные-члены текущего объекта.
Мое предложение:
Измените function_call
, чтобы оно возвращало std::tuple<double, double, double>
вместо обновления значений объектов, переданных по ссылке.
Затем вы можете использовать:
class foo
{
private:
foo(std::tuple<double, double, double> const& t) : foo(std::get<0>(t), std::get<1>(t), std::get<2>(t)) {}
public:
foo() = delete;
foo(double a, double b, double c)
{
// Something
}
foo(int n) : foo(function_call(n)) {}
};
Вы также можете использовать std::array<double, 3>
в качестве возвращаемого значения function_call
и соответствующим образом обновить конструктор.
foo(std::array<double, 3> const& arr) : foo(arr[0], arr[1], arr[2]) {}