在没有使用函数指针的情况下,将函数(具有相同的输入参数/返回类型)作为参数传递给另一个函数的正确方法是什么?我希望传入的函数参数在被调用时被内联?好吧,我只是不想指针间接。
我发现了这个:
Pass a function as an explicit template parameter
但似乎是在使用函数指针。
编辑:我真的非常希望避免创建结构来存储每个函数参数的行为。答案 0 :(得分:1)
如果你知道编译时的专业化,你只需要传递类型信息:
void inlined_function() {}; // function you want to pass
template<typename F> void caller1() {
inlined_function(); // not passed through pointer, call inline
}
如果您可以控制内联函数,请将其实现为仿函数:
struct X {
inline void operator()() // inline function
{
}
};
template<typename F> void caller2(F functor) {
functor(); // inline call
}
两种变体的客户端代码:
caller1<inlined_function>();
caller2(X{});
修改强>:
如果您无法控制将仿函数编写为结构,请为其编写内联结构包装。
例如,您有void inlined_function() {};
,需要写caller2
。在这种情况下,编写一个类似于X
的函数调用inlined_function
,或者(更好),一个lambda:
template<typename F> void caller2(F functor) {
functor(); // inline call
}
caller2( [](){ inlined_functor(); } );