Как получить доступ к аргументам вмещающей функции из макроса? - PullRequest
0 голосов
/ 16 мая 2018

Я хочу реализовать макрос, который работает как cmake_parse_arguments(PARSE_ARGV ...), то есть тот, который получает доступ к аргументам включающей функции.К сожалению, ${ARGN}, ${ARGC} и ${ARGVn} имеют особое значение в макросе и вызывают подстановки строк параметров макроса.Я хотел бы получить доступ к переменным ARGN и ARGC и ARGVn области действия включающей функции .

1 Ответ

0 голосов
/ 16 мая 2018

Обходной путь - использовать промежуточную ссылку на переменную в качестве escape.Только самая внутренняя подстановка является макроподстановкой, таким образом, ${${}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}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...