我试图在不初始化的情况下实现委托构造函数。这是因为我需要通过函数调用获得适当的值。如何编写没有代码重复的正确代码?
class foo
{
private:
// Something
public:
foo() = delete;
foo(double a, double b, double c)
{
// Something
}
foo(int n)
{
double a, b, c;
// a, b, c passed by reference and appropriate value is obtained here.
function_call(n, a, b, c);
// construct this object as if the call is foo(a, b, c) now
foo(a, b, c); // ??? Does this work?
}
};
答案 0 :(得分:1)
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]) {}