繁体   English   中英

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

[英]C/C++: using a typedef'd function pointer to *declare* a function

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

关于如何在没有大量无意义文本的情况下使用此代码的任何想法,或者我是否仍然需要为每个需要声明的函数重复整个函数签名? 谢谢。

#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("%d\n", 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 ++。

禁用此标准非常明确(来自[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 定义它。

你可能会这样做

using myfunc = void (int);

myfunc A, B, C, etc;

对于指针功能:

myfunc* f = A;

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM