我正在制作一个协议(protocol)接口(interface)。该协议(protocol)应服务于从设备发送 ADC 数据。各种微 Controller 都有允许 ADC 读取的库,但当然,它们是不同的类型。
例如,Nucleo 中的模拟读取:
AnalogIn ain(A0);
unsigned short value = ain.read_u16();
还有阿杜诺:
int analogPin = 3;
int val = analogRead(analogPin);
虽然这些方法返回不同的类型,而且实际上是完全不同的类型,但它们返回相同的数据。
我的问题是,是否有可能创建一个接受这两个函数作为回调并将它们的返回值作为 int
返回的类。
像这样:
class ThisIsNotReal {
public:
ThisIsNotReal(<ANY TYPE THAT CAN CONVERT TO INT HERE> (*cb)() ) {
callback = cb;
}
int getVal() {
return callback();
}
private:
<ANY TYPE ... (some super magical template? anyone?)> (*cb)()
}
当然,我的目标是在不编写太多代码的情况下获得与 Arduino 兼容的代码。另外,我想学习一些模板魔法。
最佳答案
似乎 std::function
和 lambda 可能会有帮助,比如:
AnalogIn ain(A0);
std::function<int()> AdcRead = [ain](){ return ain.read_u16(); };
和
const int analogPin = 3;
std::function<int()> AdcRead = [analogPin](){ return analogRead(analogPin); };
关于c++ - 接受 0 个参数并返回类型可转换为 int 的未知类方法回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27673095/