Передача параметров в C++ для указателя на функцию, который является параметром другой функции?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Передача параметров в C++ для указателя на функцию, который является параметром другой функции?

Сообщение Anonymous »

Я хочу написать функции поиска в ширину и поиска в глубину для графа. Но эти функции должны иметь возможность принимать функцию в качестве параметра, чтобы я мог передавать в функцию каждый узел графика по мере того, как нахожу его при поиске. Поскольку некоторым из этих функций нужны собственные параметры, как мне передать эти второстепенные параметры?
Пример псевдокода:

Код: Выделить всё

void BreadthFirstSearch(node* n, void (*func)(node*)){
// do the search stuff
// run the function on each node
func(current_node);
}
void SetColor(node* n, color c){ // set color... }
void SetNumber(node* n, int i){ //set number... }

int main(){
// make the graph...
// set the color...
BreadthFirstSearch(n, SetColor, WHERE DO I PUT THE COLOR PARAMETER?);
Я понял, как передать указатель функции в функции поиска, но указатель функции не принимает дополнительных аргументов, поэтому SetColor(node* n) может изменить цвет каждого узла он задается во время поиска, но мне приходится жестко закодировать цвет в функции SetColor.
Вот урезанная версия моего кода, чтобы вы могли видеть что я пытаюсь сделать:

Код: Выделить всё

void BFS(node* n, void (*func)(node*)){
// make a visited set
std::set visited = std::set();
// make a frontier queue
std::queue frontier = std::queue();
frontier.push(n);

while(!frontier.empty()){
// get current node from frontier
node* current = frontier.front();
frontier.pop();
// add current node to visited set
visited.insert(current);
// get neighbors from current node and add to frontier...

// run the function on the current node
func(current);
}
}

void set_color(node* n){
// hard code the color because I don't know what I'm doing
n->color = (255, 0, 0);
}

int main(){
// do stuff
// run the search with set_color function
BFS(start_node, set_color);
// do more stuff
}
Я также пытался найти вариативные функции, думая, что смогу передать параметр цвета в качестве дополнительных параметров. Но я недостаточно хорошо понимаю синтаксис вариативной функции. Хотя это может быть частью решения.

Подробнее здесь: https://stackoverflow.com/questions/783 ... nother-fun
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»