c++ - 如何将 C++ 宏转换为更优雅的解决方案

标签 c++ templates macros

<分区>

我写了一个 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);

关于c++ - 如何将 C++ 宏转换为更优雅的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46720057/

相关文章:

c++ - 找不到 Swift 编译器错误 'iostream'

c++ - 用于 openmp 4.5 卸载到 (gpu) 设备的 nvptx gcc (9.0.0/trunk) 找不到 libgomp.spec

c++ - TCPL 5.9.9 (C++) : Where would it make sense to use a name in its own initializer?

内置类型的基于 C++ 类型的分派(dispatch)

c++ - 从方法返回变量类型

c++ - 使用 boost 预处理实例化模板函数和类

c++ - C++代码执行过程中如何连接dll文件?

javascript - 如何让 {{#each}} 使用这些模板?

C++ 如何保护自己不受 stdio.h 宏的影响

c++ - 可变参数宏