如何在C++中定义宏函数返回void或else

Win*_*gha 5 c++ macros


我定义了以下两个函数宏来检查线程类中的退出标志。

//use this in run()
#define CHECK_EXIT  if( exitFlag_ ) {\
    //do something\
    return;\
}\

//use this in function
#define CHECK_EXIT_IN_FUNC  if( exitFlag_ ) {\
    //do something\
    return false;\
}\
Run Code Online (Sandbox Code Playgroud)

我必须单独定义它们,因为返回值不同。
我可以在一个宏中定义它吗?
我用谷歌搜索,但找不到答案。
感谢您的任何建议。

jxh*_*jxh 5

您可以使用可变参数宏。如果您在检查后不想退回任何东西,则无需输入任何内容。

#define CHECK_EXIT(...) CHECK_EXIT_(_, ##__VA_ARGS__)
#define CHECK_EXIT_(...) CHECK_EXIT_X(__VA_ARGS__, _1, _0)(__VA_ARGS__)
#define CHECK_EXIT_X(_0, _1, X, ...) CHECK_EXIT ## X
#define CHECK_EXIT_0(_) do if (exit_flag_) { /*...*/ return; } while(0)
#define CHECK_EXIT_1(_, R) do if (exit_flag_) { /*...*/ return (R); } while(0)

void test_0 () {
    bool exit_flag_ = true;
    CHECK_EXIT();
}

int test_1 () {
    bool exit_flag_ = true;
    CHECK_EXIT(0);
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

我使用了另一个答案中描述的参数计数技巧的非常简化的版本。我能够简化它,因为##__VA_ARGS__如果变量参数扩展为空,我依赖 GCC 扩展 () 来删除尾随逗号。如果您不使用支持此 GCC 扩展的编译器,请使用完整版本。