c++ - 接受 0 个参数并返回类型可转换为 int 的未知类方法回调

标签 c++ templates callback

我正在制作一个协议(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/

相关文章:

c++ - wxWidgets + Windows 上的 Cygwin

c++ - 如何检测一个类是否有成员变量?

jQuery跨域ajax : callback when executed

c++ - 访问属于 WiFi 监听器回调成员函数的类的成员

c++ - 从给定的图像数据中提取像素数据。需要帮助理解代码

c++ - 对类成员而不是 getter 的 Const 引用

C++ |如何在函数结果中返回所有 PID?

templates - Grails动态更新模板属性

C++ 协变模板

javascript - 如何通过函数调用访问回调