【发布时间】:2020-02-25 12:47:13
【问题描述】:
我有一个要使用的类结构,并且我想使用派生类的函数作为构造函数参数传递给基类。我找不到合适的语法(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# 人)。
【问题讨论】:
-
要调用
pCallback或SimpleSensor,您需要一个SimpleSensor实例来调用它,还需要一个SPortSensor*作为参数。SPortSensor的内部如何获得第一个? -
看起来更像是多态性的工作。
-
你能说明你打算用回调函数做什么吗?似乎有一个非常简单的解决方案不涉及手动将您自己的函数传递给您的父类。另外,您使用的是什么 C++ 版本/标准(在 C++11 之前或之后)?
-
我正在使用 c++11(平台 IO / Arduino)。基本上 SPortSensor 可以正常工作。它需要来自使用此类的应用程序的回调函数,因此必须强制使用构造函数。我现在有一个“内部”具有回调函数的简单版本,但我想重新使用 SPortSensor 类,因为它包含更多功能并被其他类使用。
-
虚函数有用吗? (它不能在基类构造函数中使用,但如果你需要它,无论你如何设置都会有问题,因为派生类的成员尚未初始化。)
标签: c++ function constructor member derived-class