gpt4 book ai didi

c++ - C/C++ 别名函数到具有不同参数的其他函数

转载 作者:行者123 更新时间:2023-12-01 13:11:52 25 4
gpt4 key购买 nike

以下是关于我想做什么以及为什么要做的一些背景知识。实际问题在最底部......

我有一个具有某种格式的 API。例如

int f(void *str1, void *str2) {...}

我想重新实现 API 背后的系统,以便它可以替代旧系统。然而,事实证明 str1 现在是不必要的,而且如果您知道您正在使用我的新系统,那么拥有它也没有意义。因此,我希望能够公开有意义的底层 API:

int f_internal(void *str2);

现在我的代码看起来像这样:

#ifdef  USE_INTERNAL
#define INTERNAL(sym) sym##_internal
#else
#define INTERNAL(sym) sym
#endif

extern "C" {
#ifndef USE_INTERNAL
int f(void *str1, void *str2){
return INTERNAL(f)(str2);
}
#endif

SOME_ATTRIBUTES
int
INTERNAL(f)(void *str2){
... // actual content
} EXPORT_FUNCTION_MACRO(INTERNAL(f), 1);

}

效果是,如果我定义了 USE_INTERNAL,对 f(a) 的调用有效,但我没有定义它,那么我们必须使用 f(a, b)。

我遇到的问题是 EXPORT_FUNCTION_MACRO 本身定义了另一个函数名称,但没有首先评估 INTERNAL(F)。这导致消息

dir: error: pasting ")" and "_" does not give a valid preprocessing token
INTERNAL(sym) \
--- NOTE--- EXPORT_FUNCTION_MACRO takes args 'sys' and 'n'
other_dir: note: in definition of macro ‘EXPORT_FUNCTION_MACRO’
void _example##sym##_##n(void) {} \

我想做什么:

我想要一个编译标志,它可以改变调用某些东西所需的参数数量。也许像(如果它存在的话)

using f(a, b) = f_internal(a);

有什么想法吗?

最佳答案

This results in the message

为了修复消息,让宏参数在连接它们之前展开。

#define EXPORT_FUNCTION_MACRO_X(sys, n) EXPORT_FUNCTION_MACRO(sys, n)
EXPORT_FUNCTION_MACRO_X(INTERNAL(f), 1);

关于c++ - C/C++ 别名函数到具有不同参数的其他函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59379005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com