使用std :: function和继承的类

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

我在一些函数回调中遇到了一个小问题。如何定义一个函数,以便我可以有一个f派生的x,并将其分配给派生的,但是给定的函数对象想要基类。能做到吗?从逻辑上讲,这是有道理的。也许我缺少某种形式的指针用法?

这是我正在复制的基本软件的简化形式。

#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;
}

编辑:修复了调用,因为愚蠢的错误,还对可能的工作做了一些微调?

c++ functional-programming stl
1个回答
0
投票

我不确定我是否完全了解你想要什么,但打来电话

  d.foo();

不起作用,因为它接受base类型的参数。您可以通过定义foo不采用参数来解决此问题。

class base {
public:
 std::function<void(void)> foo; 
}; 

主电话然后必须改写为


int main()
{
   derived d;
   d.foo = [&d]{ f(d); };
   ...
}

这有效,但可能不是您想要的。参见在线示例here;

© www.soinside.com 2019 - 2024. All rights reserved.