【问题标题】:pass function returning void * as argument传递函数返回 void * 作为参数
【发布时间】:2018-04-09 05:39:46
【问题描述】:

我想传递一个作为参数的函数并将void * 返回给另一个函数。 现在我有以下代码:

MyClass *MyClass::bind(std::function<void*(void *)> fun) {
    this->value = fun(this->value);
    return this;
}

valueMyClass 内部的void * 变量,我不知道如何将函数传递给我的函数bind
当我尝试将这样的函数名称传递给它时

auto *class = new MyClass();
class->bind(fooFunction);

我得到了错误

no viable conversion from '<overloaded function type>' to 'std::function<void *(void *)>'

有没有什么方法可以用这段代码实现我想要的,或者有更简单的方法吗?

【问题讨论】:

  • 您的问题不在于显示的代码,而在于您选择不显示的代码。键入一个minimal reproducible example,它会重现错误并以其他方式编译,但它是最小的并分享它。你的变量名是非法的,所以你的伪代码不能是完全不相关的代码。

标签: c++ c++11 pointers function-pointers void-pointers


【解决方案1】:

您有不止一个 fooFunction 重载。

使用只有一个重载(与签名匹配)的函数名。

或者,将其包装在 lambda 中:

auto *bob = new MyClass();
bob->bind([](void*ptr)->void*{return fooFunction(ptr);});

并依赖于无状态 lambda 隐式转换为函数指针。

【讨论】:

  • 是的,我在函数定义中写错了类型,所以我在代码中有两个同名的函数。我还有一个问题,但我会在未来提出一个新问题,提供更多细节。
猜你喜欢
  • 2021-11-19
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-21
相关资源
最近更新 更多