Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
                        
                        2年前关闭。
                                                                                            
                
        
我编写了一个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 );


我想用更优雅的代码替换此代码。您认为模板可以帮助我吗?还有其他想法吗?

谢谢。

最佳答案

普通模板应该足以满足该设施的需要,因为关于您的问题没有什么变化:

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);

10-06 12:45