Можете ли вы объяснить этот указатель на пустоту внутри параметра функции? - PullRequest
0 голосов
/ 09 мая 2020

Вот код, о котором идет речь! Я не тратил много времени на C ++, и я использую дерево двоичного поиска.

void BST::Preorder(void(*visit)(const Node *))

Позже функция вызывается следующим образом:

bst.Preorder(PrintNode)

При реализации PrintNode следующим образом:

void PrintNode(const Node* n)
{
    cout << n->GetValue() << ",";
}

Предлагается реализовать эту функцию предварительного заказа - - но меня очень смущает то, что здесь происходит. Кто-нибудь может указать мне правильное направление. Спасибо.

Ответы [ 3 ]

2 голосов
/ 09 мая 2020

Это параметр типа указателя на функцию, принимающую const Node * и возвращающую void, а имя параметра - visit.

Другими словами, если у вас есть такая функция, как func() , вы можете передать его на BST::Preorder()

void func(const Node * )
{
    //do something
}
0 голосов
/ 09 мая 2020

Итак, Preorder - это функция, которая будет перебирать все узлы в двоичном дереве поиска (в определенном порядке) и делать что-то на каждом узле. Поэтому полезно написать Preorder таким образом, чтобы вызывающий Preorder мог указать, что должно быть сделано на каждом узле. В этом назначение параметра visit. Это функция (фактически указатель на функцию), которую Preorder должен вызывать на каждом посещенном узле. В приведенном вам примере каждый узел будет напечатан, но, указав другую функцию в качестве параметра для Preorder, вы можете заставить его делать что-то другое.

0 голосов
/ 09 мая 2020
void BST::Preorder(void(*visit)(const Node *))
  • Это функция Preorder класса BST.
  • Параметр этой функции является указателем на функцию.
  • *visit означает, что это функция указатель, который принимает const Node * как свой собственный параметр и возвращает void.

Так что, как правило, вам придется реализовать эту visit функцию в другом месте. Затем использует эту функцию visit где-нибудь в функции Preorder.

...