【发布时间】:2026-02-22 00:50:01
【问题描述】:
我正在处理一个广泛使用模板的第 3 方 C++ 库。这使得创建一个 C API 以在我的框架中使用它变得很困难。
抽象问题,假设库提供了函数:
template <int i> void foo();
template <int i> void zoo(int v);
我想用函数头创建一个 C API:
extern "C" void c_foo(int i);
extern "C" void c_zoo(int i, int v);
一个明显的实现可能是:
void c_foo(int i)
{
switch(i) {
case 1: foo<1>(); break;
case 2: foo<2>(); break;
case 3: foo<3>(); break;
default: break;
};
};
对void zoo(int)也做同样的事情。
如果i 的可能值范围很小,则此方法可以正常工作。如果我想处理 [1,100] 中i 的所有可能值,那么以这种方式编写代码会变得非常难看,因为有很多重复。
有没有更紧凑的方法来做到这一点,即编写更少的代码行?也许使用递归预处理器宏?
【问题讨论】:
-
“也许使用递归预处理器宏?” 有许多库提供帮助宏来执行此操作。例如。 boost 预处理器库。
标签: c++ c c++11 templates c-preprocessor