Какая польза от двух круглых скобок здесь в "crypto / conf / conf.h" Эрика Янга? - PullRequest
1 голос
/ 18 марта 2019

Мне не удалось понять, что означают эти две круглые скобки?

struct conf_method_st {
    const char *name;
    CONF *(*create) (CONF_METHOD *meth);
    int (*init) (CONF *conf);
    int (*destroy) (CONF *conf);
    int (*destroy_data) (CONF *conf);
    int (*load_bio) (CONF *conf, BIO *bp, long *eline);
    int (*dump) (const CONF *conf, BIO *bp);
    int (*is_number) (const CONF *conf, char c);
    int (*to_int) (const CONF *conf, char c);
    int (*load) (CONF *conf, const char *name, long *eline);
};

Я предполагаю, что происходит какое-то приведение типа или инициализация. Кто-нибудь может объяснить?

1 Ответ

4 голосов
/ 18 марта 2019

Это синтаксис для типа указателя на функцию.

Взяв первый пример:

CONF *(*create) (CONF_METHOD *meth);

Он определяет член структуры с именем create, который указывает на функцию, получающую единственный параметр типа CONF_METHOD* и возвращающий значение типа CONF*

Так, например, если у вас была функция:

CONF *my_create(CONF_METHOD* meth)
{
   //...
}

Тогда вы можете сохранить указатель на эту функцию в вашей структуре:

struct conf_method_st c;
c.create = my_create;

И вы можете вызывать его как функцию:

CONF *conf = c.create(meth);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...