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

时间:2020-03-22 18:37:30

标签: c++

我的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 copyed_file)”与类型“ void()(int,int)”的参数不兼容

错误C3867'TV_DepthCamAgent :: progress_callback':非标准语法;使用“&”创建指向成员的指针

我在做什么错了?

1 个答案:

答案 0 :(得分:3)

由于您已标记此C ++,所以我假设您需要C ++解决方案。

自C ++ 11起,我们可以使用.来代替笨拙的C风格的函数指针语法。

所以std::function变成void(*progress_callback)(int, int)

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

std::function<void(int, int)> progress_callback

然后在... shared::Utils::copy_files(&progress_callback); ... 中调用时必须传递必需的参数。

应该为此使用copy_filesstd::function而不是您似乎正在编写的C风格