将 void (*)() 转换为 void (*)(无符号字符)
Convert void (*)() to void (*)(unsigned char)
我正在尝试将void (*)()
转换为void (*)(unsigned char)
但我C++知识不够好。我搜索了一下,但找不到任何例子。所以我想创建一个函数函数,但我得到一些错误:
typedef void (* voidFuncPtr)();
void castHandler(voidFuncPtr handler)(uint8_t gpio_num)
{
handler();
}
void attachInterrupt(uint8_t pin, voidFuncPtr handler, int mode)
{
// typedef void (* voidFuncPtr)();
// typedef void (* gpio_interrupt_handler_t)(uint8_t gpio_num);
// typedef void (* gpio_interrupt_handler_t)(unsigned char)
gpio_set_interrupt(pin, GPIO_INTTYPE_EDGE_ANY, castHandler(handler));
}
错误:"强制处理程序"声明为返回函数 void 的函数 castHandler(voidFuncPtr handler((uint8_t gpio_num(
错误:未在此范围内声明"强制转换处理程序" gpio_set_interrupt(pin, GPIO_INTTYPE_EDGE_ANY, castHandler(handler((;
有人可以帮助我吗?
您需要为每个 GPIO 维护一个处理程序表。类似于以下内容(未经测试和不完整 - 省略了一些初始化和错误检查(代码:
typedef void (* voidFuncPtr)();
voidFuncPtr handlers[MAX_HANDLERS];
void attachInterrupt(uint8_t pin, voidFuncPtr handler, int mode)
{
handlers[pin] = handler;
}
void handleGPIO(unsigned char pin)
{
if (handlers[pin])
handlers[pin]();
}
void enableGPIOInterrupts(void)
{
/// Do this for each available pin
gpio_set_interrupt(pin, GPIO_INTTYPE_EDGE_ANY, handleGPIO);
}
为什么不写一个函数来做重定向,即
void redirectFunction(unsigned char)
{
handler();
}
然后
gpio_set_interrupt(pin, GPIO_INTTYPE_EDGE_ANY,redirectFunction);
编辑
也许这在C++:
void redirectFunction(std::function<void()> handler, unsigned char)
{
handler();
}
void wibble() { }
gpio_set_interrupt(pin, GPIO_INTTYPE_EDGE_ANY,
std::bind(redirectFunction, _1, wibble)
);
相关文章:
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 将无符号char*转换为std::istream*C++
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- 如何打印boost多精度128位无符号整数
- C++模板函数,用于比较任何无符号整数和有符号整数
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 获取隐式转换溢出从无符号到已签名的警告
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 从 std::vector<无符号字符>切片中提取 int?
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 将 void (*)() 转换为 void (*)(无符号字符)
- 从“void*”到“无符号字符*”的转换无效
- CUDA:__device__和__global__错误:在"无符号"/"void"之前预期的构造函数、析构函数或类型转换"
- 将无符号char*缓冲区强制转换为可接受参数的可调用void指针