C++ define/macro返回指向同一文件中给定函数的函数指针
说我有密码C++ define/macro返回指向同一文件中给定函数的函数指针,c++,c,function-pointers,C++,C,Function Pointers,说我有密码 void 1funct() { (...) } void 2funct() { (...) } etc., to void nfunct() { (...) } 是否可以将函数指针返回到给定n的正确函数 定义RET_FUNC_POINTERn&nfunct 是-宏可以使用以下命令将源代码字符连接到单个标记中: 标记是源代码的不可见构建块,是解析器在试图理解程序时从代码生成的离散文本单元。它们大体上类似于英语中的单词,但是它们不需要在C++中被空间分隔,除非省略空间只产生单个令
void 1funct() {
(...)
}
void 2funct() {
(...)
}
etc., to
void nfunct() {
(...)
}
是否可以将函数指针返回到给定n的正确函数
定义RET_FUNC_POINTERn&nfunct 是-宏可以使用以下命令将源代码字符连接到单个标记中: 标记是源代码的不可见构建块,是解析器在试图理解程序时从代码生成的离散文本单元。它们大体上类似于英语中的单词,但是它们不需要在C++中被空间分隔,除非省略空间只产生单个令牌:例如int main vs int,但int *vs. int。使用,我们可以使用两个可能的标记int和main,并使用预处理器将它们强制转换为intmain。只是,其中一个参数是宏的变量。请注意,您不需要连接&和n funct部分,因为&已经是一个单独的标记,并且应该保持这种方式
但是,您可能希望考虑一个很好的指针数组。 如果在编译时静态地知道n,而宏必须在编译时才能工作,那么除了混淆代码之外,仅仅编写&1funct、&2funct等并没有什么好处
还要注意,函数名不能以数字开头;您必须选择不同的命名方案。是-宏可以使用以下方法将源代码字符连接到单个标记中: 标记是源代码的不可见构建块,是解析器在试图理解程序时从代码生成的离散文本单元。它们大体上类似于英语中的单词,但是它们不需要在C++中被空间分隔,除非省略空间只产生单个令牌:例如int main vs int,但int *vs. int。使用,我们可以使用两个可能的标记int和main,并使用预处理器将它们强制转换为intmain。只是,其中一个参数是宏的变量。请注意,您不需要连接&和n funct部分,因为&已经是一个单独的标记,并且应该保持这种方式
但是,您可能希望考虑一个很好的指针数组。 如果在编译时静态地知道n,而宏必须在编译时才能工作,那么除了混淆代码之外,仅仅编写&1funct、&2funct等并没有什么好处
还要注意,函数名不能以数字开头;您必须选择不同的命名方案。不确定为什么要这样做,而不只是使用常量数组,但使用宏很容易:
#define RET_FUNC_POINTER(n) (n##funct)
不确定为什么要这样做,而不只是使用常量数组,但使用宏很容易:
#define RET_FUNC_POINTER(n) (n##funct)
函数名不能以数字开头,是吗?两个答案同时发布,都独立地说使用一个数组——就是这样。如果我们忽略标识符不能以数字开头,你可以这样做;请看下面的答案,但我怀疑它是否能给你任何帮助。宏参数必须在预处理时为常量;所以它不可能是一个变量,等等。如果这个数字是常量,那么可以直接编写&nfunct。正如其他人所说,您可能需要一个函数指针数组。可以做一些类似于_nfunt的事情来规避标识符命名规则。带有前导下划线的名称虽然不是普遍禁止的,但通常是个坏主意。函数名不能以数字开头,是吗?同时发布两个答案,两者都使用一个数组——就是这样。如果我们忽略标识符不能以数字开头,你可以这样做;请看下面的答案,但我怀疑它是否能给你任何帮助。宏参数必须在预处理时为常量;所以它不可能是一个变量,等等。如果这个数字是常量,那么可以直接编写&nfunct。正如其他人所说,您可能需要一个函数指针数组。可以执行类似于_nfunct的操作来规避标识符命名规则。带有前导下划线的名称虽然不是普遍禁止的,但通常是一个坏主意。如果n是存储在变量中的字符指针,例如char*v=1而不是整数值,是否可以这样做,如果不是,我必须进行哪些调整才能实现这一点?如果n是存储在变量中的字符指针,比如说char*v=1而不是整数值,是否可能实现这一点?如果不是,我必须进行哪些调整才能实现这一点?