帮助宏功能

pic*_*c11 2 c c++ macros

给定许多具有相同签名的内联函数.所有功能都很小,性能至关重要.

int inline f1(int);
int inline f2(int);
...
int inline f5(int);
Run Code Online (Sandbox Code Playgroud)

我需要编写高级函数来自动执行某些任务 - 每个内联函数一个高级函数.第n个高电平功能仅使用第n个低电平功能,否则所有高电平功能都相同.

int F_n(int x) {
    int y;
    // use n-th low level function to compute y from x
    // for example
    y = x*f_n(x);

    return y;
}
Run Code Online (Sandbox Code Playgroud)

我可以使用函数指针进行回调,但我认为它会阻止倾斜并且性能会受到影响.或者我可以复制&贴纸并手动修复功能名称.

有没有办法用宏来做?一个可以自动生成高级功能的宏?

#define GEN_FUNC( HIGH_LEVEL_FUNC, LOW_LEVEL_FUNC ) \
???????               \
???????               \

GEN_FUNC(F1, f1); // generate F1
GEN_FUNC(F2, f2); // generate F2
.........
GEN_FUNC(F_N, f_N); // generate F_N
Run Code Online (Sandbox Code Playgroud)

可能吗?

谢谢.

PS我可以使用函数对象,但它也应该在C中工作.

xDD*_*xDD 10

为什么不使用模板?

template <int N>
int inline f(int);

template <>
int inline f<1>(int);

template <>
int inline f<2>(int);

template <>
int inline f<3>(int);

...

template <int N>
int F(int x)
{
    int y;
    y = x * f<N>(x);
    return y;
}
Run Code Online (Sandbox Code Playgroud)

编辑:如果它应该在C中工作,请使用如下宏:

#define GENERATE_FUNCTION(n) \
    int F_ ## n(int x) {     \
        int y;               \
        y = x*f_ ## n(x);    \
        return y;            \
    }
Run Code Online (Sandbox Code Playgroud)

并使用BOOST_PP_REPEAT:

#define GENERATE_FUNCTION_STEP(z, n, unused) GENERATE_FUNCTION(n)

BOOST_PP_REPEAT(N, GENERATE_FUNCTION_STEP, ~)
Run Code Online (Sandbox Code Playgroud)