gpt4 book ai didi

c++ - 将函数作为指针传递时,如何指定参数?

转载 作者:行者123 更新时间:2023-11-27 22:58:03 24 4
gpt4 key购买 nike

我发现了大量关于函数指针的信息,但有一件事确实令人困惑。我应该如何指定正在传递的函数的参数?我一直在尝试做的一个例子......

void BatchDelete(string head, string filename, void (*f)(string, string));
void DeleteOneNode(string head, string song);
BatchDelete(head, filename, DeleteOneNode)

据我所见,当传递一个函数时,它永远不应该有括号,因为那是一个函数调用,但是我如何指定 DeleteOneNode 得到的两个字符串?

最佳答案

你不知道。函数指针是指向要调用的函数的指针,由调用点提供参数。

#include <iostream>

void target(const std::string& str)
{
std::cout << "fn " << str << "\n";
}

void caller(void (*fn)(const std::string&))
{
fn("hello world");
}

int main()
{
caller(target);
}

现场演示:http://ideone.com/AWsxk5

在您提供的示例中,BatchDelete 获取一些参数,从中似乎可以找到歌曲,然后它使用所需的参数调用您的回调函数,为您传递它们 - 您不需要担心试图通过它们。

这就是函数指针的意义所在,它找到要删除的文件,但随后它希望您提供用于删除的函数,更重要的是,函数指针的目的是关于 收到来自中间函数的参数。

--- 编辑---

一个更“批量删除”的示例版本:

#include <iostream>

void callbackfn(std::string path, std::string filename)
{
std::cout << "delete " << path << "\\" << filename << "\n";
}

void BatchDelete(std::string path, std::string file, void (*fn)(std::string, std::string))
{
// pretend these are songs we found in playlist.mpl
fn(path, "Alanis\\*.*");
fn(path, "Mix Tape\\ReallySadSong.mp3");
}

int main()
{
BatchDelete("C:\\Music\\", "playlist.mpl", callbackfn);
}

http://ideone.com/NEpXeC

关于c++ - 将函数作为指针传递时,如何指定参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30611510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com