分配默认值 std::function
Assign a default value std::function
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);
相关文章:
- 库函数需要一个 std::function<void(void)>,如何传入类函数?
- Confusion: decltype vs std::function
- 为什么 std::function 可以作为 std::not2 的参数?
- 'max'匹配'std::function<const int &(const int &, const int &)>'无过载
- 传递给std::function template的template参数究竟代表什么
- 将带有unique_ptr的可变 lambda 传递给 const&std::function
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 如何在向量中删除 std::function<void()>?
- 将函数包装器转换为 std::function
- 类型擦除的std::function与虚拟函数调用的开销
- C++ std::function 对于类 exept 的所有实例都是空的(只有 Visual2019 编译器问题)
- 如果模板没有可变参数,则 Lambda 被推导出为 std::function
- 将 lambda 表达式传递给 std::function in C++
- 广义 std::function (std::any 表示可调用对象)
- std::function<std::optional<T>()> 如何与返回 T 的 lambda 兼容?
- std::function std::bind with lambda overload ambiguity
- Clang bug with std::function, std::bind and std::ref?
- 为什么我会收到编译错误"use of deleted function 'std::unique_ptr ..."
- 为什么我不能让 std::function<std::vector<T>::iterator> 绑定到返回该类型的 lambda?
- 回调(std::function/std::bind)与接口(抽象类)的优缺点