我想实现类似于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
会出现问题,因为break
和continue
可以与之交互,这不是很好。关于c++ - 如何使用宏中宏后面的代码块?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62841530/