c++ - 如何将成员函数传递给基类构造函数?
问题描述
我有一个要使用的类结构,并且我想使用派生类的函数作为构造函数参数传递给基类。我找不到正确的语法(C 的新手 :))
这是我使用的基类,它有一个带有回调函数的构造函数:
class SPortSensor {
public:
SPortSensor(sensorData (*pCallback)(SPortSensor*));
sensorData getValue();
private:
sensorData (*getData)(SPortSensor*);
};
这是在类 (pCallback) 中实现回调函数的派生类,因此它具有不同的构造函数和需要传递给基类构造函数的成员函数:
class SimpleSensor : public SPortSensor {
public:
SimpleSensor(int id);
long value;
private:
int _id;
sensorData pCallback(SPortSensor*);
};
这个头文件编译得很好。我看到的唯一错误是 SimpleSensor 构造函数的实现。我找不到正确的语法:
sensorData SimpleSensor::pCallback(SPortSensor* sensor) {
...
}
SimpleSensor::SimpleSensor(int id) : SPortSensor(pCallback) {
_id = id;
}
谷歌搜索这个问题并没有太大帮助,因为我可能没有使用正确的搜索词并且对 c++ 了解不够(我是 C# 人)。
解决方案
循环参考闻起来可能存在一些一般性的所有权问题。
但是,解决僵局的一种方法是使用std::function<sensorData(SPortSensor*)>
函数指针而不是函数指针。然后用指向自身的 lambda 初始化基类:
SimpleSensor(int id) : SPortSensor([this](SPortSensor* sps) { return pCallback(sps); }) { }
我不能有意识地宽恕这个,但当我尝试它时它并没有爆炸。需要注意的是,SimpleSensor 在调用基本构造函数时不会被初始化,因此 SPortSensor 不能在其自己的构造函数中调用 lambda。
推荐阅读
- python-3.x - 无法通过 xpath 定位,因为它的 Xpath 总是在变化
- swift - Swift - 从字典中读取不同类型的值
- python - 如何在数据框python中拆分json文件
- elixir - 将信息从解析器传递到解析后中间件
- mysql - 为什么mysql在外部加入可空列的子查询时抱怨选择列表包含非聚合列?
- python - hdf5 附加到数据集通过引用添加
- javascript - 在我禁止/踢出用户后,我将如何 PM 用户?
- javascript - UIKIT Slider 轮播中心点击
- salesforce-lightning - 嵌套闪电光环迭代
- python-3.x - 是否可以从python调用notepad ++的宏?