我正在为 Arduino 开发一个共享库。在我的中断附件中,我需要声明一个类型为void(*)()
.
我传入一个 void 函数数组,然后循环遍历以填充对象的属性,如下所示:
主单元.h
class MainUnit {
public:
MainUnit(const String type,
const int revisionNumber,
const int totalInputs,
uint8_t avrPinNumbers[],
uint8_t spdtPinNumbers[],
void* isrs[]);
private:
void* InterruptServiceRoutines[];
};
主单元.cpp
MainUnit::MainUnit(const String type,
const int revisionNumber,
const int totalInputs,
uint8_t avrPinNumbers[],
uint8_t spdtPinNumbers[],
void* isrs[] )
{
// copy spdt pins and isrs over
for (uint8_t input = 0; input < totalInputs; input++) {
this->InterruptServiceRoutines[input] = isrs[input];
}
}
有没有办法用它来代替void(*)()
. 当我尝试这样的事情时,我收到错误“无法将类型的左值转换void*
为参数类型”:void(*)()
attachInterrupt(digitalPinToInterrupt(8), this->InterruptServiceRoutines[0], CHANGE)
void*
我想我有一个更大的问题是,和有什么区别void(*)()
?我尝试搜索并没有找到任何答案。我假设void(*)()
是指向 void 函数void*
的指针,而不是指向 void 类型的指针?如果是这样,是否有初始化 void 函数指针数组的正确方法?