如何在C++宏转换为更优雅的解决方案
问题描述:
我写了一个C++的宏包的两个通用功能的执行:如何在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);
答
你可以还要看std :: bind以在安装时修复这些参数。
在C++ 11中,我会简单地删除宏。来想一想,我不知道这个动作需要什么特定的C++ 11。 –
如果这是实际的代码:直接删除宏。它没有附加价值。 @CrazyEddie:GMTA – MSalters