我想实现类似于Boost库对其宏进行的操作(例如,就像BOOST_FOREACH一样)。
这是我当前使用的宏的一个示例:

#define LOCK_GUARD(var, block) { std::lock_guard<std::mutex> ___scope__(var); block }


std::mutex mutex;

LOCK_GUARD(mutex, {
    // body...
});
我想知道如何以这种方式进行修改,因此可以使用LOCK_GUARD如下所示:
LOCK_GUARD(mutex)
{
    // body...
}

最佳答案

if条件中定义变量。然后,您的代码块可以是if主体。

#define LOCK_GUARD(var) \
    if (::std::lock_guard<std::mutex> _lock_guard_(var); false) {} else
注意false) {} else而不是true)-它防止用户代码中的else附加到宏。
请注意,使用循环(仅执行一次)代替if会出现问题,因为breakcontinue可以与之交互,这不是很好。

关于c++ - 如何使用宏中宏后面的代码块?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62841530/

10-13 06:30