【发布时间】:2020-12-17 14:44:03
【问题描述】:
这是一个 VS2010 C++ 项目。我有一个 API 列表:
-
int a = API1("para1", "para2", ...); -
double a = API2("para1", "para2", ...); -
float a = API3("para1", "para2", ...);
现在,我需要添加一个新的 API,APINEW()。只要运行上述 API,APINEW 就需要按如下方式调用。因此,我决定使用 Variadic Macros,如下所示:
#define newAPI1(...) ( API1(__VA_ARGS__); APINEW() )
#define newAPI2(...) ( API2(__VA_ARGS__); APINEW() )
#define newAPI3(...) ( API3(__VA_ARGS__); APINEW() )
但是,我无法从我的 API1、API2 和 API3 正确获取返回值。
我正在尝试使用以下代码,因为我知道 marco 将始终返回最后一项,但它无法通过编译。
#define newAPI1(...) ( {auto a = API1(__VA_ARGS__); APINEW(); a} )
我想知道有没有一种方法可以使它正确? (我使用新名称(例如newAPI1)的原因是为了避免冲突,因为在项目中,它可能有其他宏会重载现有的API1、API2和API3。)
另一个问题: 有没有办法通过组合
-
__VA_ARGS__的第一个参数 __FUNCTION____LINE__
进入 APINEW 参数 => APINEW(first parameter of __VA_ARGS__ + __FUNCTION__ + __LINE__)
【问题讨论】:
标签: c++ c++11 macros c-preprocessor variadic-macros