初始化项列表中std::bind初始化的std::函数
std::function from std::bind initialization in the initializer list
我有一张针对特定选择的行动图,
struct option {
int num;
std::string txt;
std::function<void(void)> action;
};
void funct_with_params(int &a, int &b)
{
a = 3; b = 4;
}
int param1 = 1;
int param2 = 3;
我想以新的初始化器列表的方式初始化这些向量:
const std::vector<option> choices
{
{
1,
"sometext",
std::bind(&funct_with_params, std::ref(param1), std::ref(param2))
},
}
我无法在向量中初始化函数,有没有一种方法可以通过某种方式将std::bind
传递给向量?
我能够通过使用lambda表达式而不是绑定来使示例工作,是不是缺少了什么?或者这不是使用std::bind
的正确方式?
我正在使用C++11,因为我无法转换到较新的标准。
问题是选项中操作成员变量的类型为std::function<void(void)>
,并且您正在用不同的函数初始化选项(std::function<void(int &a, int &b)>
)。这是由于std::bind
的功能(std::bind
)。
您需要正确的类型。此外,我可能建议,因为您想要使用常量向量,所以最好使用std::array
。
代码示例:
#include <functional>
#include <vector>
#include <array>
struct option {
int num;
std::string txt;
std::function<void(int &a, int &b)> action;
};
void funct_with_params(int &a, int &b){
a = 3; b = 4;
}
int main(){
int param1 = 1;
int param2 = 3;
//vector fill
const std::vector<option> choices{
{ 1, "sometext", std::bind(funct_with_params, std::ref(param1), std::ref(param2)) }
};
//array fill
const std::array<option, 1> choices2 = {
{ 1, "sometext", std::bind(funct_with_params, std::ref(param1), std::ref(param2)) }
};
return 0;
}
另一个解决方案是使用模板。
相关文章:
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 使用通用值初始化 std::map,不重复
- 初始化 std::vector 替换为单大括号而不是双大括号
- 在构造函数中使用可变参数初始化 std::tuple
- 使用大括号初始化 std::vector 使用初始值设定项列表
- 为什么初始化 std::vector 时不能使用模板整数?
- 如何在构造函数参数中初始化"std::set"?
- 初始化 std::数组 of Eigen::Map
- 我可以列表初始化 std::vector 并完美转发元素吗?
- 在 C++20 之前和之后初始化 std::atomic
- C++初始化 std::function 时如何将占位符绑定到引用/引用参数?
- 如何初始化 std::向量的映射?
- 如何在构造函数初始值设定项列表中使用 n 个元素初始化 std::vector<std::time_t>
- 使用范围库初始化 std::vector
- 如何在类的初始值设定项列表中初始化 std::array,而不对数组的大小进行硬编码
- 我是否需要在构造函数中显式初始化 std::unique_ptr?
- 如何使用派生类类型数据初始化 std::shared_ptr?
- 为什么我必须在初始化 std::array<SomeStruct, size> 时指定每个项目的类型C++
- 根据指针条件初始化std::vector
- 正在使用unique_ptr初始化std::vector