【发布时间】:2021-01-20 04:15:06
【问题描述】:
所以我在 C++ 中有一个成员函数,它接收一个 std::function<void>,我想将它传递给一个 WiringPi 函数:
void my_class::on_change(std::function<void()> func) const
{
wiringPiISR(
wiring_pi_pin_number_,
INT_EDGE_BOTH,
func);
}
我收到错误cannot convert ‘std::function<void()>’ to ‘void (*)()’ in initialization。我在网上看过,我只发现有一百行指针和引用转换并且不在 pi 上编译的东西。在这里寻求任何帮助。我应该一直使用void (*)() 吗?这似乎是错误的方法。我可以找到很多关于将void (*)() 转换为std::function<void> 的信息,但反之则不行..
PS:我是 C++ 的菜鸟。我的主要语言是 C# 和其他一些高级语言,所以还在学习这门语言,不知道我在这里缺少什么..
【问题讨论】:
-
这显然是不可能的,除非你使用一些全局/静态变量,但它不是线程安全的(全局变量通常被认为是丑陋的)
-
几乎与c++ - How do I pass a std::function object to a function taking a function pointer? - Stack Overflow 重复——除了在这种特殊情况下不可能将用户数据传递到函数中。
-
好吧,如果你可以使用函数指针,那么就一直使用它(它们是无状态的或至少是全局状态的)
标签: c++ raspberry-pi c++17 std-function