分配默认值 std::function

Assign a default value std::function

本文关键字:function std 默认值 分配      更新时间:2023-10-16
class A{
private:
 typedef std::function<void(A*)> Myfunction;
 Myfunction actionEvent;
public:
  A(){
actionEvent={std::cout<<"Hello"};
//declare a default function value here
};
void executeAction(){
this->actionEvent(this);
}
}

如何在构造函数中为myfunction赋值?

你需要分配一些可以调用的东西,就像具有匹配签名的函数一样。 {std::cout<<"Hello"}首先不是一个函数或可调用的,因此赋值毫无意义。尝试这样的事情:

int fun(int i) {return i;}
std::function<int(int)> foo1 = fun;

std::function<void(A*)> foo2 = [](A* a){a->something();}

后一种语法称为 Lambda。

可以通过以下方式定义具有默认参数和"execute"成员函数的构造函数:

class A {
 std::function<void(A*)> actionEvent;
public:
  A(std::function<void(A*)> actionEvent_ = {}) : actionEvent(actionEvent_) {}
  void exec() { if(actionEvent) actionEvent(this); }
};

现场演示

使用初始值设定项列表,并使用要作为默认值的函数初始化 std::function。

class A;
void my_func(A* a);
class A{
    private:
    std::function<void(A*)> myfunction;
    public:
    A(): myfunction(my_func)
    {}
};
void my_func(A* a)
{
    //use a
}

或者,如果您希望用户指定函数或使用默认的非 null 函数,请执行以下操作:

 A(std::function<void(A*)> func = my_func): myfunction(my_func)
 {}

在这种情况下,您可以构造对象,

例如
 A foo;             
 A bar(other_func);