我最近看到了一些代码,我特别不清楚类似的函数指针?
以下是函数指针。
我也对下面三个函数感到困惑,参数类型是“cairo_output_stream_t”,但是cairo_output_stream_t结构包含有三个函数指针的成员。我无法理解以下功能在做什么。typedef cairo_status_t
(*cairo_output_stream_write_func_t) (cairo_output_stream_t *output_stream,
const unsigned char *data,
unsigned int length);
typedef cairo_status_t
(*cairo_output_stream_flush_func_t) (cairo_output_stream_t *output_stream);
typedef cairo_status_t
(*cairo_output_stream_close_func_t) (cairo_output_stream_t *output_stream);
struct _cairo_output_stream {
cairo_output_stream_write_func_t write_func;
cairo_output_stream_flush_func_t flush_func;
cairo_output_stream_close_func_t close_func;
unsigned long position;
cairo_status_t status;
int closed;
};
cairo_status_t是一个枚举
答案 0 :(得分:3)
基本上完成的是一种类似于C的方式来模拟C ++的this
指针......你将指针传递给struct
作为第一个函数调用的参数,从那个指针你可以调用"方法"结构(在这种情况下,它们是函数指针)和/或访问结构的数据成员。
因此,例如,您可能使用这种编程风格的代码,如下所示:
struct my_struct
{
unsigned char* data;
void (*method_func)(struct my_struct* this_pointer);
};
struct my_struct object;
//... initialize the members of the structure
//make a call using one of the function pointers in the structure, and pass the
//address of the structure as an argument to the function so that the function
//can access the data-members and function pointers in the struct
object.method_func(&object);
现在method_func
可以访问data
实例的my_struct
成员,就像C ++类方法可以通过{{访问其类 - 实例非静态数据成员一样1}}指针。