C++:从重载函数到 std::function 的转换
C++: conversion from overloaded function to std::function
我有一个 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
包含在代码中。
我该怎么办?我已经尝试使用模板和函数指针解决这个问题,但我没有这样做。
- 操作系统:Windows10 64 位
- 编译器:g++ 8.2.0
编辑:
这是代码库的简化版本:
#include <iostream>
#include <vector>
#include <functional>
class ParseResult {
public:
ParseResult() {}
};
class Parser {
public:
ParseResult* c;
ParseResult* bin_op(std::function<ParseResult*()> func_a, std::vector<std::string> ops, std::function<ParseResult*()> func_b);
ParseResult* func_1();
ParseResult* func_2();
Parser() {
c = bin_op(static_cast<ParseResult*(*)()>(func_1), {"MOD"}, static_cast<ParseResult*(*)()>(func_2));
}
};
ParseResult* Parser::func_1() { return new ParseResult(); }
ParseResult* Parser::func_2() { return new ParseResult(); }
ParseResult* Parser::bin_op(std::function<ParseResult*()> func_a, std::vector<std::string> ops, std::function<ParseResult*()> func_b) {
ParseResult* a = func_a();
ParseResult* b = func_b();
return a;
}
int main() {
parser = new Parser();
std::cout << parser->c;
}
我有一个 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
包含在代码中。
我该怎么办?我已经尝试使用模板和函数指针解决这个问题,但我没有这样做。
- 操作系统:Windows10 64 位
- 编译器:g++ 8.2.0
编辑: 这是代码库的简化版本:
#include <iostream>
#include <vector>
#include <functional>
class ParseResult {
public:
ParseResult() {}
};
class Parser {
public:
ParseResult* c;
ParseResult* bin_op(std::function<ParseResult*()> func_a, std::vector<std::string> ops, std::function<ParseResult*()> func_b);
ParseResult* func_1();
ParseResult* func_2();
Parser() {
c = bin_op(static_cast<ParseResult*(*)()>(func_1), {"MOD"}, static_cast<ParseResult*(*)()>(func_2));
}
};
ParseResult* Parser::func_1() { return new ParseResult(); }
ParseResult* Parser::func_2() { return new ParseResult(); }
ParseResult* Parser::bin_op(std::function<ParseResult*()> func_a, std::vector<std::string> ops, std::function<ParseResult*()> func_b) {
ParseResult* a = func_a();
ParseResult* b = func_b();
return a;
}
int main() {
parser = new Parser();
std::cout << parser->c;
}