【发布时间】:2020-04-07 21:37:04
【问题描述】:
我在一些功能性回调方面遇到了一点问题。如何定义一个函数,以便我可以拥有派生 x 的 f,并将其分配给派生,但鉴于函数对象需要基类。 这可以做到吗?这在逻辑上是有道理的。也许我错过了某种形式的指针用法?
这是我正在使用的实际软件的简化形式,可作为可复制的基础。
#include <functional>
#include <iostream>
class base {
public:
std::function<void(base*)> foo;
};
class derived : public base {
public:
//EDIT:Would this work?
std::function<void(derived*)> foo;
int bar = 0;
};
void f(derived* x)
{
x->bar++;
}
int main()
{
derived d;
d.foo = f; //Issue no matching operator, LHS std::function<void(base)> , RHS void(derived)
d.foo(&d); //No match for call to std::function<void(base)>
std::cout << d.bar;
}
编辑:修复了调用,因为愚蠢的错误,还稍微调整了可能有效的方法?
【问题讨论】:
-
想想你是否将
derived2传递给foo -
在您的电话
d.foo();中,您缺少参数。此外,function<void(base)>表示函数对象应该可以使用base对象调用,但您尝试为其分配的函数需要derived对象。如何从base对象中获取derived对象?这种逻辑有些不对劲。 -
您的错误信息不再与代码匹配...尤其是,现在您有 2 个 foo 成员...
-
仅仅因为你在使用
std::function并不意味着你在做“函数式编程”。为什么要加那个标签?
标签: c++ functional-programming stl