C++ 构造函数委托,但如何(某种程度上)反转?
C++ constructor delegation, but how to (sort of) invert?
据我所知,在 C++11 中,构造函数委托可以如下所示:
class Foo
{
public:
Foo()
{
// Some code to be ran first
}
Foo(std::string bar): Foo() // Runs the code to be ran first
{
// Some code to be ran second, presumably using bar
}
};
我想知道如何在某种程度上扭转这种局面。即,在调用 Foo()
构造函数的情况下,我想 运行 一些代码来计算 std::string
的值,然后 Foo(std::string bar)
将使用该值来完成初始化。所以 Foo()
运行 是它自己的代码和 Foo(std::string bar)
中的代码,而后者 运行 只是它自己的代码,比如
class Foo
{
public:
Foo()
{
std::string bar_figured_out;
// Figures out the value for bar_figured_out
Foo(bar_figured_out); // I know this wouldn't work, just an example of what I'm trying to do.
}
Foo(std::string bar):
{
// Some code to finish class initialization, using bar
}
};
有没有什么方法可以使用构造函数委托来完成此操作?
你有两个选择:
将代码从 Foo(std::string bar)
移动到成员函数,并从 Foo()
和 Foo(std::string bar)
调用它。
将确定bar_figured_out
值的代码移动到一个成员函数,然后让Foo()
在委托给Foo(std::string bar)
时调用该函数:
Foo() : Foo(compute_bar()) {}
据我所知,在 C++11 中,构造函数委托可以如下所示:
class Foo
{
public:
Foo()
{
// Some code to be ran first
}
Foo(std::string bar): Foo() // Runs the code to be ran first
{
// Some code to be ran second, presumably using bar
}
};
我想知道如何在某种程度上扭转这种局面。即,在调用 Foo()
构造函数的情况下,我想 运行 一些代码来计算 std::string
的值,然后 Foo(std::string bar)
将使用该值来完成初始化。所以 Foo()
运行 是它自己的代码和 Foo(std::string bar)
中的代码,而后者 运行 只是它自己的代码,比如
class Foo
{
public:
Foo()
{
std::string bar_figured_out;
// Figures out the value for bar_figured_out
Foo(bar_figured_out); // I know this wouldn't work, just an example of what I'm trying to do.
}
Foo(std::string bar):
{
// Some code to finish class initialization, using bar
}
};
有没有什么方法可以使用构造函数委托来完成此操作?
你有两个选择:
将代码从
Foo(std::string bar)
移动到成员函数,并从Foo()
和Foo(std::string bar)
调用它。将确定
bar_figured_out
值的代码移动到一个成员函数,然后让Foo()
在委托给Foo(std::string bar)
时调用该函数:Foo() : Foo(compute_bar()) {}