首页 > 其他 > 详细

typedef复杂声明

时间:2021-07-14 11:58:44      阅读:21      评论:0      收藏:0      [点我收藏+]

在看AMCL源码时,发现typedef的用法看不懂,搜了下,发现是函数指针的重命名

// Function prototype for the initialization model; generates a sample pose from
// an appropriate distribution.
typedef pf_vector_t (*pf_init_model_fn_t) (void *init_data); // Function prototype for the action model; generates a sample pose from
// an appropriate distribution
typedef void (*pf_action_model_fn_t) (void *action_data, 
                                      struct _pf_sample_set_t* set);

// Function prototype for the sensor model; determines the probability
// for the given set of sample poses.
typedef double (*pf_sensor_model_fn_t) (void *sensor_data, 
                                        struct _pf_sample_set_t* set);

 

先看第一个,pf_init_model_fn_t是声明的新名字,也可以这么写

typedef pf_vector_t (*) (void *init_data) pf_init_model_fn_t;

这样看就清晰了。

pf_init_model_fn_t是函数指针,(*)后面是的括号是函数的形参,void *表示无类型指针,可以指向任意类型的变量; (*)前面pf_vector_t值得是这个函数的返回类型。
 
 
第二个也是这样理解
typedef void (*) (void *action_data, struct _pf_sample_set_t* set) pf_action_model_fn_t;

pf_action_model_fn_t是函数指针,指向带两个参数的函数,函数无返回类型。

第三个同样的理解

还有其他的复杂声明的,可以看https://www.cnblogs.com/wen-ge/articles/5807509.html

typedef复杂声明

原文:https://www.cnblogs.com/havain/p/15009833.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!