C ++:从重载函数到std :: function]的覆盖范围>

问题描述 投票:0回答:1

我有一个C ++函数,该函数接受其他两个函数作为参数:

// ParseResult is a class with a default constructor (no arguments)
ParseResult* bin_op(std::function<ParseResult*()> func_a, std::vector<std::string> ops, std::function<ParseResult*()> func_b);

当我通过以下方式调用此函数时:

bin_op(func_1, {"MOD"}, func_2);
// Both func_1 and func_2 are of type ParseResult*, and take in no parameters

编译器抛出此错误:

no known conversion for argument 1 from '<unresolved overloaded function type>' to 'std::function<ParseResult*()>

我的代码编辑器显示此:

no suitable constructor exists to convert from "ParseResult *()" to "std::function<ParseResult *()>"

std::function包含在代码中。

我该怎么办?我已经尝试使用模板和函数指针解决此问题,但是我没有这样做。

  • 操作系统:Windows 10 64位
  • 编译器:g ++ 8.2.0

我有一个C ++函数,它接受其他两个函数作为参数:// ParseResult是具有默认构造函数的类(无参数)ParseResult * bin_op(std :: function ...

c++ std-function
1个回答
0
投票
似乎func_1有多个重载;您可以使用static_cast指定应选择的重载。

[static_cast也可以通过执行函数到指针的转换为特定类型来消除函数重载的歧义
© www.soinside.com 2019 - 2024. All rights reserved.