C ++ typedef объявление - PullRequest
       4

C ++ typedef объявление

3 голосов
/ 07 декабря 2010

Не могли бы вы объяснить, что означает следующая строка?

typedef int (*Callback)(void * const param,int s)

Ответы [ 3 ]

6 голосов
/ 07 декабря 2010

Это означает, что Callback - это новое имя для типа: указатель на функцию, возвращающую int и принимающий два параметра типа 'const pointer to void' и 'int'.

Для данной функцииf:

int f(void * const param, int s)
{
    /* ... */
}

Callback может использоваться для сохранения указателя на f:

Callback c = &f;

Функция f может быть позже вызвана через указательбез прямой ссылки на его имя:

int result = c(NULL, 0);

В точке вызова имя f не появляется.

2 голосов
/ 07 декабря 2010

Он объявляет тип функции:

// Set up Callback as a type that represents a function pointer
typedef int (*Callback)(void * const param,int s);

// A function that matches the Callback type
int myFunction(void* const param,int s)
{
    // STUFF
    return 1;
}

int main()
{
    // declare a variable and assign to it.
    Callback   funcPtr = &myFunction;
}
2 голосов
/ 07 декабря 2010

Создает новый «псевдоним» или имя, по которому вы можете ссылаться на указатели на функции, которые возвращают int и принимают два параметра: void* const и int.Затем вы можете создавать переменные этого типа, присваивать им, вызывать через них функцию и т. Д. Как:

int fn(void * const param,int s) { ... }

Callback p;
p = fn;
int x = p(NULL, 38);

Обратите внимание, что typedef s на самом деле не создают новые типы ... каждый эквивалентный typedefразрешается в единый вещественный тип для разрешения перегрузки, создания шаблона и т. д.

...