当前位置: 首页 > 知识库问答 >
问题:

如何将方法(作为回调)作为参数传递给方法?

司承业
2023-03-14

我有静态方法在我的Utils

这就是定义

/*static*/ void Utils::copy_files(void(*progress_callback)(int, int),
        std::string const & path_from,
        std::string const & path_to)
    {
      ....
    }

这里用的是

void TV_DepthCamAgent::progress_callback(int count, int copied_file)
{
    printf("Progress :: %d :: %d\n", count, copied_file);
}

void TV_DepthCamAgent::foo()
{
    ...
    shared::Utils::copy_files(progress_callback, path_from_copy, path_to_copy);
    ...
}

这是我得到的一个错误

E0167类型为“void(TV_DepthCamAgent::)(int count,int copied_file)”的参数与类型为“void()(int,int)”的参数不兼容

错误C3867“TV_DepthCamAgent::progress_callback”:非标准语法;使用'

我做错了什么?

共有1个答案

班泽语
2023-03-14

既然你已经标记了这个C,我假设你想要一个C解决方案。

从C 11开始,我们可以使用std::function来代替笨拙的C风格的指针到函数语法。

所以void(*progress\u callback)(int,int)变成std::function

至于为什么会出现这种错误,这是因为要传递函数指针,必须通过引用传递函数

...
    shared::Utils::copy_files(&progress_callback);
...

然后,在copy\u files中调用它时,必须传递所需的参数。

你应该使用std::functionstd::bind,而不是你似乎在写的C风格

 类似资料:
  • 在下面的代码中,我希望将'races.class'作为参数传递给方法'get allraces()'。我该怎么做?

  • 问题内容: 我正在用JavaScript准备一些变量(在我的特定情况下,我想获取GPS位置): 我想通过下面的命令按钮将它们发送到我的托管bean: 如何将JavaScript中的变量和变量发送到JSF托管bean操作方法? 问题答案: 让JS以相同的形式将它们设置为隐藏的输入值。 命令按钮操作方法可以按通常方式将它们作为bean属性进行访问。

  • 我想通过下面的命令按钮将它们发送到我的托管bean: 我如何将和变量从JavaScript发送到JSF托管bean动作方法?

  • 我有一个Kotlin代码: 现在我想从Java类调用这个方法。我不知道该怎么称呼这个。这是我试过的 但它显示了以下错误。

  • 我有一个用例,其中一个类存在于一个包的两个版本中。 到目前为止还不错(我相信)。 然后我有一个使用该类的应用程序,为了避免为不同的包版本重写应用程序,我想传递应该使用的类(即感兴趣的包)作为应用程序的参数。所以像这样的东西 我相信我可以把这个叫做如果我在构造函数中传递的实例,那么我会通过实例对象调用静态方法,不是吗? 另一方面,在上面的示例中,是一个类对象,因此我不能像上面那样调用静态方法。 这是

  • 我正在编写一个方法,如果我想将一个类传递给一个方法,其中代码的一部分包括检查对象是否属于某种类型。这就是我想要的(但显然不行): 关于如何做到这一点有什么提示吗?谢谢!