如何从宏中访问封闭函数的参数?

时间:2018-05-16 08:10:18

标签: cmake

我想实现一个像cmake_parse_arguments(PARSE_ARGV ...)一样工作的宏,即访问封闭函数参数的宏。不幸的是,${ARGN}${ARGC}${ARGVn}在宏中具有特殊含义,并且它们调用宏参数字符串替换。我想访问封闭函数范围ARGNARGC以及ARGVn变量。

1 个答案:

答案 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}