是否可以使用单个参数创建一个函数,该函数返回指向全局范围的void返回无参数函数的指针?
我问嵌入式硬件,我试图定义一系列中断服务程序来附加到数字引脚。
我的意思的一个例子:
#define MAX_BUTTONS 5
int main()
{
for (int i = 0; i < MAX_BUTTONS; i++) {
attachInterrupt(i, isrForI(i), RISING);
}
}
typedef void (*Isr)(void);
Isr isrForI(int i)
{
// Return a function of type Isr which calls handleInterrupt(i)
}
void handleInterrupt(int i)
{
// Do something with i
}
这里的问题是不知道如何在isrForI
中足够通用,因为我需要它是可扩展的,以便MAX_BUTTONS
可以是任何数字。
答案 0 :(得分:2)
由于您在编译时知道 <td ng-repeat="ro in room.Roms">
(@Convert.ToInt32({{ro.RRPrice}})* @Convert.ToInt32({{ ro.DiscountPercent}}))/ 100 ;
</td>
,因此您可以使用模板来避免创建运行时函数:
MAX_BUTTONS
与您的代码唯一不同的是,它会将#define MAX_BUTTONS 5
typedef void (*Isr)(void);
template <int N>
void handleInterrupt() { /* int i = N; */ }
template <int N>
Isr isrForI() {
return handleInterrupt<N>;
}
template <int N>
struct attach_interrupts {
static void attach() {
attachInterrupt(N, isrForI<N>(), RISING);
attach_interrupts<N - 1>::attach();
}
};
template <>
struct attach_interrupts<0> {
static void attach() {
attachInterrupt(0, isrForI<0>(), RISING);
}
};
int main() {
attach_interrupts<MAX_BUTTONS - 1>::attach();
}
到MAX_BUTTONS - 1
而不是0
的中断附加到0
(但您可以轻松调整模板)。< / p>
如@StoryTeller在评论中提到的,如果你想保留MAX_BUTTONS - 1
,你可以这样做:
handleInterrupt(int)