【发布时间】:2016-09-28 04:16:38
【问题描述】:
我在网上搜索了一段时间,不幸的是我没有找到我的问题的答案或解决方案,事实上,假设我有 2 个这样命名的函数:
1) function1a(some_args)
2) function2b(some_args)
我想做的是编写一个宏,当输入正确的参数时,它可以识别这些函数,只是问题是,这个参数也应该是 C/C++ 函数的参数,这就是我所做的到目前为止。
#define FUNCTION_RECOGNIZER(TOKEN) function##TOKEN()
void function1a()
{
}
void function2a()
{
}
void anotherParentFunction(const char* type)
{
FUNCTION_RECOGNIZER(type);
}
显然,宏正在识别“functiontype”并忽略 anotherParentFunction 的参数,我在问是否存在/存在技巧或任何东西来执行这种粘贴方式。
提前谢谢你:)
【问题讨论】:
-
你应该使用函数重载而不是宏。只需给 function1a 和 function1b 赋予相同的名称:function1。
-
我想避免重载并在不使用它的情况下找到解决方案。
-
对于这个任务重载是很自然的方法,必须使用。宏不是为此而不能使用的,因为宏不知道类型。
-
你是不是认为如果你打电话给
anotherParentFunction("1a"),那么你最终会打电话给function1a(),但是如果你打电话给anotherParentFunction("2a"),你最终会打电话给function2a()?如果是这样,那么您很遗憾地误解了 C++ 预处理器的操作。这是一个运行时决定,不能由预处理器编码——例如,如果你使用包含用户提供的数据的变量而不是字符串文字,那就更不行了。 -
@JonathanLeffler 只要在编译时知道这些值,就有可能。