C/C++:使用 typedef'd 函数指针来 *声明* 函数



我需要typedef一个函数指针类型来创建一个指针数组,来声明将在数组中结束的大量函数。然而,我找不到同时做这两件事的方法:要么我可以获得数组的指针,要么我可以声明函数,但不能两者都声明。

关于如何在没有大量毫无意义的文本的情况下让这些代码工作,或者我是否一直在为我需要声明的每个函数重复整个函数签名,有什么想法吗?谢谢

#include <stdio.h>
// declare a fn ptr type named 'myfunc'
typedef void (*myfunc)(int);
//myfunc A,B,C,etc;  **doesn't work, because of the (*)
void A(int);         // does work, but becomes very tedious
int main() {
   myfunc B = A;     // actually assigning a large 2D array
   A(42);
   B(43);
}
void A(int foo) {
   printf("%dn", foo);
}

在C++中,您可以使用

std::remove_pointer_t<myfunc> A, B, C;

或者为函数类型声明一个typedef,为指向函数类型的指针声明另一个typedef:

typedef void myfunc(int);
typedef myfunc * myfuncptr;
myfunc A, B, C;

后者在C和C++中工作。

您可以进行

using myfunc = void (int);
myfunc A, B, C, etc;

对于指针功能:

myfunc* f = A;

演示

标准非常明确地禁止这一点(来自[dcl.fct]):

函数类型的typedef可用于声明函数,但不应用于定义函数(8.4)。[示例:

typedef void F();
F fv;              // OK: equivalent to void fv();
F fv { }           // ill-formed
void fv() { }      // OK: definition of fv

-结束示例]

在你的情况下,你可以写:

using F = std::remove_pointer_t<myfunc>;
F A, B, C;

但是,您仍然必须使用普通的函数声明符来定义这些函数,所以这除了具有神秘性之外,不会有太多效果。

您可以使用typedef:声明(成员)函数

typedef int F(int);
F f; // declare a function
int main() { f(1); } // and call it

但是不能使用typedef来定义

最新更新