我想实现一个像cmake_parse_arguments(PARSE_ARGV ...)
一样工作的宏,即访问封闭函数参数的宏。不幸的是,${ARGN}
,${ARGC}
和${ARGVn}
在宏中具有特殊含义,并且它们调用宏参数字符串替换。我想访问封闭函数范围的ARGN
和ARGC
以及ARGVn
变量。
答案 0 :(得分:0)
绕过它的方法是使用插入的变量引用作为转义。只有最里面的替换是宏替换,因此${${}ARGV0}
被宏替换为${${}ARGV0}
,然后第一个变量替换给出${ARGV0}
,第二个变量替换产生最里面的第一个参数的值函数范围包含宏。
因此:
macro (show_arg1)
message("1:${${}ARGV1}")
endmacro()
function (test_function)
show_arg1()
endfunction()
test_function(foo bar baz)
输出:
1:bar
这允许实现行为类似cmake_parse_arguments
的宏,但在解析封闭函数的参数时执行其他操作。
${}
变量替换是否应该触发错误,可以使用任何未设置的变量,例如。 ${${mgUXpKW8srYnwnSP}ARGV1}
。