typedef&功能指针

时间:2013-01-31 17:46:26

标签: c++ typedef

我最近看到了一些代码,我特别不清楚类似的函数指针?

以下是函数指针。

我也对下面三个函数感到困惑,参数类型是“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是一个枚举

1 个答案:

答案 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}}指针。