【发布时间】:2021-05-23 07:37:19
【问题描述】:
我想创建一个基类 class==> 派生类设置,其中基类的构造函数有一个回调来运行(可能很复杂)函数,以使用派生类的信息修改基类的私有成员。但是,我遇到了先有鸡还是先有蛋的问题,因为基类构造函数在派生类的成员初始化之前运行。下面是演示问题的代码:
#include <iostream>
#include <functional>
class B
{
public:
typedef std::function<void(std::string &)> mod_func_t;
B(const mod_func_t &m) : foo("base str")
{
std::cout << "Base constructor\n";
m(foo);
std::cout << "base constructor finally has: " << foo << std::endl;
}
private:
std::string foo;
};
class D : public B
{
public:
D(const std::string &input) :
B(std::bind(&D::my_f, this, std::placeholders::_1)),
input_(input)
{
std::cout << "Derived constructor\n";
}
private:
void my_f(std::string &s)
{
std::cout << "Derived class' modification function\n";
s += input_; // <== Crashes here because input_ is not yet constructed
}
const std::string input_;
};
int main()
{
D d("my input");
return 0;
}
这样做的正确方法是什么?
【问题讨论】:
标签: c++ oop derived-class