C++ 标识符_uva_ARGS_uuu只能出现在可变宏的替换列表中
我试图创建一个宏来执行api调用。我当前的问题是调用参数的传递。我收到以下错误消息: 标识符_uva_ARGS_uuu只能出现在可变宏的替换列表中C++ 标识符_uva_ARGS_uuu只能出现在可变宏的替换列表中,c++,macros,C++,Macros,我试图创建一个宏来执行api调用。我当前的问题是调用参数的传递。我收到以下错误消息: 标识符_uva_ARGS_uuu只能出现在可变宏的替换列表中 从技术上讲,可以通过使用运算符加载来解决这一问题,但我相信应该有一种方法可以让它保持这样的简单并使其正常工作。可变宏语法不是这样工作的;…必须表示宏的附加参数。宏不能像迭代函数调用那样在单独的括号中包含多组参数 我认为你必须做到以下几点: #define DO_CALL(api_name, ...) wow64hg::do_call(FNV(#api
从技术上讲,可以通过使用运算符加载来解决这一问题,但我相信应该有一种方法可以让它保持这样的简单并使其正常工作。可变宏语法不是这样工作的;
…
必须表示宏的附加参数。宏不能像迭代函数调用那样在单独的括号中包含多组参数
我认为你必须做到以下几点:
#define DO_CALL(api_name, ...) wow64hg::do_call(FNV(#api_name), __VA_ARGS__)
const auto status = DO_CALL(TerminateProcess, process_handle, 0);
可变宏语法不是这样工作的;
…
必须表示宏的附加参数。宏不能像迭代函数调用那样在单独的括号中包含多组参数
我认为你必须做到以下几点:
#define DO_CALL(api_name, ...) wow64hg::do_call(FNV(#api_name), __VA_ARGS__)
const auto status = DO_CALL(TerminateProcess, process_handle, 0);
谢谢你的回复。事实上我已经知道了,这是有效的。但是,我们特别希望它采用我的帖子中的格式(api名称和参数之间用括号隔开,如DO_CALL(api_name)(…)@MemeMachine),我认为你不可能只用一个宏就实现这一点。您可以使用一个扩展为lambda的宏来包装实际调用@米尔斯布德内克嗯,我明白了。谢谢你的回复。事实上我已经知道了,这是有效的。但是,我们特别希望它采用我的帖子中的格式(api名称和参数之间用括号隔开,如DO_CALL(api_name)(…)@MemeMachine),我认为你不可能只用一个宏就实现这一点。您可以使用一个扩展为lambda的宏来包装实际调用@米尔斯布德内克嗯,我明白了。