给定许多具有相同签名的内联函数。所有功能都很小且性能至关重要。
int inline f1(int);
int inline f2(int);
...
int inline f5(int);
我需要编写高级函数来自动执行某些任务 - 每个内联函数一个高级函数。第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;
}
我可以使用函数指针进行回调,但我认为它会阻止倾斜并且性能会受到影响。或者我可以复制& paster并手动修复函数名称。
有没有办法用宏来做?一个可以自动生成高级函数的宏吗?
#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
有可能吗?
感谢。
P.S。我可以使用函数对象,但它也应该在C中工作。
答案 0 :(得分: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;
}
编辑:如果它应该在C中工作,请使用这样的宏:
#define GENERATE_FUNCTION(n) \
int F_ ## n(int x) { \
int y; \
y = x*f_ ## n(x); \
return y; \
}
使用BOOST_PP_REPEAT:
#define GENERATE_FUNCTION_STEP(z, n, unused) GENERATE_FUNCTION(n)
BOOST_PP_REPEAT(N, GENERATE_FUNCTION_STEP, ~)
答案 1 :(得分:3)
我很难看到困难:
#define GEN_FUNC( HIGH_LEVEL_FUNC, LOW_LEVEL_FUNC ) \
inline int HIGH_LEVEL_FUNC(int x) { \
int y; \
y = x*LOW_LEVEL_FUNC(x); \
return y; \
}
还是我错过了什么?
答案 2 :(得分:1)
您可以使用不需要C ++编译器的Boost.Preprocessor轻松完成。使用BOOST_PP_REPEAT,您可以轻松生成n
个函数(当然,您必须定义n
。