Как интерпретировать "void (*) ()"? - PullRequest
4 голосов
/ 10 октября 2019

Когда я прочитал shared_ptr , я нашел фрагмент кода:

void(*)()

Как его интерпретировать?

Ответы [ 3 ]

5 голосов
/ 10 октября 2019

Это указатель на тип функции, который можно использовать для всех функций, которые не имеют аргументов и возвращают void.

Например:

void function_1() {}
void function_2() {}

void(*func_1_ptr)() = function_1; // or = &function_1;
void(*func_2_ptr)() = function_2; // or = &function_2;

Сейчас func_1_ptr содержит указатель на функцию function_1, а func_2_ptr содержит указатель на function_2.

Вы можете сделать тип более интуитивным с помощью объявления using.

using FunPtrType = void(*)();

и теперь вы можете написать

FunPtrType  func_1_ptr = function_1; // or = &function_1;
//Type      identifier   function
FunPtrType  func_2_ptr = function_2; // or = &function_2;
2 голосов
/ 10 октября 2019

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

0 голосов
/ 10 октября 2019

Звездочка между открывающими-закрывающими скобками (*) представляет объявление функции-указателя. Слева и справа от него представлены тип возвращаемого значения и аргументы функции функции, на которую она будет указывать.

Так что в основном в вашем случае:

void printHello()
{
    std::cout<<"Hello";
}

void(*fPtr)() = printHello;

В C ++ вы можете сделать то же самоеиспользуя лучший способ ООП:

std::function<void()> fPtr = printHello;
fPtr();

Вы должны будете включить заголовок functional

...