首页 > 解决方案 > 有没有办法使用 c/c++ 中的宏/模板生成具有迭代编号的函数名称?

问题描述

我有以下代码

extern "C" void interrupt_handler_0();
extern "C" void interrupt_handler_1();
extern "C" void interrupt_handler_2();
...

void func() {
  setup_isr(0, interrupt_handler_0);
  setup_isr(1, interrupt_handler_1);
  setup_isr(2, interrupt_handler_2);
  ...
}

在示例中,我每条线只有 3 条,但实际上还有更多,我试图以某种方式摆脱所有这些重复的线。

我最初的想法是做某种宏来生成这些,而不必把它们都写下来。类似的东西#define ISR_NAME(number) interrupt_handler_##number(),然后只有一个循环来迭代数字。经过多次谷歌搜索和几次尝试,我开始认为这实际上是不可能的?当然你可以做一个宏循环,但迭代值 i 实际上并没有在预处理器时间内计算出来。所以我总是会得到类似的东西interrupt_handler_0+1+1+1+1();

这是对的还是我错过了什么?我还有其他方法可以完成这项工作吗?

我对 c++ 还是很陌生,所以我对模板了解不多,除了它们是在 c++ 中进行元编程的一种方式。我实际上不确定它们是否适用于这个问题,但由于这段代码实际上来自一个 c++ 项目,使用 c++/模板而不是宏的解决方案也被接受。

标签: c++templatesmacros

解决方案


推荐阅读