2014-11-24 86 views
0

将函数(使用相同的输入参数/返回类型)作为参数传递给另一个函数,而不使用函数指针的正确方法是什么?我希望传入的函数参数在被调用时被内联?那么,我只是不希望指针间接。将C++函数作为参数传递,而不使用函数指针/内联?

我发现这一点:

Pass a function as an explicit template parameter

,但它似乎是使用函数指针。

编辑:我真的很希望避免必须创建结构来存储每个函数参数的行为。

回答

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,或(更好的)算符,拉姆达:

template<typename F> void caller2(F functor) { 
    functor(); // inline call 
} 

caller2([](){ inlined_functor(); }); 
+0

嘿,我喜欢你的想法编辑。所以inlined_functor()也可以有inlined_functor2(),这些仍然是同一类中的普通方法? – user997112 2014-11-24 10:55:35

+0

@ user997112 - 是的。内联函数互相调用将导致内联操作。 – utnapistim 2014-11-24 11:33:15