CMake支持宏重载还是函数重载?

问题描述 投票:0回答:1

我正在努力实现以下目标:

macro(OVERLOAD_TEST par1 par2)
  message ("Macro with two arguments")
endmacro()

macro(OVERLOAD_TEST par1 par2 par3)
  message ("Macro with three arguments")
endmacro()

并且,这样调用宏:

OVERLOAD_TEST("A" "B" "C")
OVERLOAD_TEST("A" "B")

但是出现如下错误:

Macro with three arguments
CMake Error at CMakeLists.txt:59 (OVERLOAD_TEST):
  OVERLOAD_TEST Macro invoked with incorrect arguments for macro named:
  OVERLOAD_TEST

我是否应该使用 CMake 的可选参数支持功能来代替并且只有一个宏?

cmake macros overloading
1个回答
0
投票

据我所知,不:CMake 没有您在想象的示例中展示的宏或函数重载功能。多次定义宏只会导致使用最后一个定义。

但是您可以根据传递的参数的数量和质量进行切换,从而在一个宏定义中编写“重载”。例如,在您展示的示例中,您的重载具有不同数量的参数,因此您可以通过

${ARGC}
的值来区分这些不同的调用(参见 docs)。

如果您有具有相同数量参数的“重载”,我建议切换到使用命名参数进行解析(请参阅the

cmake_parse_arguments
命令,这有助于此)。

如果您不想使用命名参数,那么您可以考虑进行基于模式的匹配,以尽可能区分重载签名(请参阅

string
命令 及其各种子命令)。

© www.soinside.com 2019 - 2024. All rights reserved.