Как я могу увидеть, что указатель на функцию, переданный функции, возвращает void? - PullRequest
0 голосов
/ 04 марта 2019

У меня есть функция, принимающая указатель на функцию, и я хочу сохранить возвращаемое значение, если функция, на которую указывает указатель, возвращается, и просто запустить функцию в противном случае.Примерно так:

static void threadStart(void (*function)(void*), void* arg) {                            
      if(function does not return void)  (void*) store = function(arg);  
       else(function())
};

Как я могу это сделать?Я пытался просто сделать:

static void threadStart(void (*function)(void*), void* arg) {                            
   (void*) store = function(arg);  
};

Но это приводит к ошибке компиляции.

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Как уже говорили другие ответы, это невозможно.

Глядя на то, что предпринимается, вы должны изменить сигнатуру function, чтобы она возвращала тип данных со значением часового.Например, function может вернуть void*, и вы можете проверить, что это не NULL.

Так что параметры threadStart станут (void* (*function)(void*), void *arg).Это соответствует общему шаблону проектирования, используемому в библиотеках, таких как pthread_create, который в своем случае имеет параметры (void *(*start_routine) (void *), void *arg).

0 голосов
/ 04 марта 2019

Вы не можете.

Поскольку function объявлено как void (*function)(void*), оно всегда возвращает void, поэтому вам не нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...