我写了一个C ++宏来包装两个泛型函数的执行:
#define DO_ACTIONS( action1, action2, handle ) \
ResetEvent( handle ); \
action1 \
action2 \
// other common stuff...
用法示例:
DO_ACTIONS( function1( 1, 2, 3 );,
function2();,
m_handleEvent );
DO_ACTIONS( function1( "some text" );,
function2( -3 );,
m_handleEvent );
我想用更优雅的东西替换这段代码。你认为模板可以帮助我吗?还有其他想法吗?
感谢。
答案 0 :(得分:3)
普通模板应该足以满足设施要求,因为您的问题没有任何变量:
template <typename F1, typename F2>
void do_actions(F1 f1, F2 f2, handle_type handle)
{
ResetEvent(handle);
f1();
f2();
}
在调用站点,您可以使用lambda表达式生成可调用对象:
do_actions([](){ function1(1, 2,3 ); },
[](){ function2(); },
m_handleEvent);
答案 1 :(得分:0)
您还可以查看std :: bind以在设置时修复这些参数。