c++ - 如何避免复制回调函数 (C++)

标签 c++ c++11 callback function-pointers

我使用的 API 只接受 void 回调函数:

void (* CALLBACKFUNC) (void);

我想调用带参数的回调函数,而不是为不同的输入参数编写多个具有相同功能的回调函数。 假设我需要一个像

这样的回调函数

void myFunc (int a);

更新:更多信息:调用回调函数,基于事件应该是这样的:

event1 -> calling myFunc(1);
event2 -> calling myFunc(2);
...

事件的数量是有限的并且 MAX 是预定义的(如果它有帮助),但我不想复制功能(实际上,在真实情况下,有多个输入值,复制不同组合的函数调用不是一件容易的事)

P.S:我也可以使用 C++11。有什么建议么?。

最佳答案

这个解决方案怎么样?您无需手动定义新函数来设置不同的状态。

#include <iostream>

void setState(int s) {

    std::cout << "Set state to " << s << std::endl;

}

template <int n>
void myWrapper() {
    setState(n);
}


void myLogic(void(*CALLBACK)(void)) {

    CALLBACK();
}


int main(int argc, char* argv[]) {


    myLogic(myWrapper<50>);
    myLogic(myWrapper<100>);

}

关于c++ - 如何避免复制回调函数 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29924750/

相关文章:

javascript - 将参数传递给回调函数而不更改方法(Siesta 测试命名空间)

c++ - 为什么只有 C++(和 D 语言)提供可变参数模板功能?可变模板有那么好吗?

c++ - 编译时模板实例化检查

ruby-on-rails - 如果 before_action 返回 false 如何执行操作

c++ - LNK2019:未解析的外部符号,但我已经对函数进行了编码

c++ - 不使用内置函数将数字从字符串转换为整数

c++ - 鼠标过滤器驱动程序的问题

C++ 在具有 O(n) 空间的数组中找到第一个非重复整数

c++ - decltype(function) 作为类成员

android - 不调用带缓冲区的 PreviewCallback 和 PreviewCallback