Что это значит, почему (предложение) в предложении? - PullRequest
0 голосов
/ 18 января 2019

Я не знаю, почему в скобках стоит int рядом с *Predicate

typedef bool (*Predicate)(int);

Ответы [ 3 ]

0 голосов
/ 18 января 2019

Это объявляет Predicate как тип указателей на функции, которые принимают параметр int и возвращают результат bool. int в скобках указывает, что это тип параметра.

Вы можете использовать это так:

typedef bool (*Predicate)(int);
bool always_true(int) { return true; }
Predicate p = &always_true;
0 голосов
/ 18 января 2019

typedef bool (*Predicate)(int); означает, что вы объявляете тип с именем Predicate, который является указателем на функцию для функции, которая принимает один аргумент int и возвращает bool. Функция, которая соответствует требованиям, будет:

bool is_zero(int val) {
    return val == 0;
}

и вы можете объявить переменную, такую ​​как:

Predicate mypredicate = is_zero;

В этом случае вероятным намерением является объявить функцию, которая выполняет операцию фильтрации, используя предикатную функцию, предоставляемую во время выполнения; он принял бы Predicate в качестве одного из своих аргументов.

0 голосов
/ 18 января 2019

Это определение типа указателя на функцию, имеющего один параметр типа int и возвращающее bool

функциональные указатели - это единственное место, где хорошо указывать указатели.

typedef bool (*Predicate)(int);

bool is_zero(int x)
{
   return x ==0;
}

Predicate myfuncptr = is_zero;


int main()
{
  if(myfuncptr(5)) 
    printf("Zero");
  else
    printf("Not zero");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...