如何将 std::bind 与 std::function 和 std::map 一起使用
How to use std::bind with std::function and std::map
我正在尝试创建 std::function 的地图,然后尝试将其绑定几个参数,但出现错误。
所以,我的 std::function 定义是
using abc = std::function<double(const double& t1, const double& t2)>;
地图是
std::map<std::pair<std::string, std::string>, abc> conversion_;
我尝试在这张地图中插入的方式是
conversion_.emplace(
std::make_pair("a", "b"),
std::bind(conversion, 3, std::placeholders::_1));
conversion_.find(std::make_pair("a", "b"))->second(4); -- Access
我已经定义了函数转换,但是当我尝试访问该函数时出现以下错误
error: no match for call to ‘(const std::function<double(const double&, const double&)>) (int)’
添加完整代码:
转换函数在单独的文件中定义:
namespace x
{
double conversion(const double& a, const double& b);
}
我试图定义映射的头文件
namespace x
{
class main
{
public:
using abc = std::function<double(const double& t1, const double& t2)>;
main();
private:
std::map<std::pair<std::string, std::string>, abc> conversion_;
};
}
CPP 文件
namespace x
{
main::main()
{
conversion_.emplace(
std::make_pair("a", "b"),
std::bind(conversion, 3, std::placeholders::_1));
auto m = conversion_.find(std::make_pair("a", "b"))->second(4);
}
}
我猜 conversion
的功能与 double(const double& t1, const double& t2)
相同。如果是这样,std::bind(conversion, 3, std::placeholders::_1)
定义一个函子,它需要一个参数 a double
(conversion
的另一个参数固定为 3
)和 return double
.你只需要修改 abc
成 std::function<double(const double& t1)>;
我正在尝试创建 std::function 的地图,然后尝试将其绑定几个参数,但出现错误。 所以,我的 std::function 定义是
using abc = std::function<double(const double& t1, const double& t2)>;
地图是
std::map<std::pair<std::string, std::string>, abc> conversion_;
我尝试在这张地图中插入的方式是
conversion_.emplace(
std::make_pair("a", "b"),
std::bind(conversion, 3, std::placeholders::_1));
conversion_.find(std::make_pair("a", "b"))->second(4); -- Access
我已经定义了函数转换,但是当我尝试访问该函数时出现以下错误
error: no match for call to ‘(const std::function<double(const double&, const double&)>) (int)’
添加完整代码: 转换函数在单独的文件中定义:
namespace x
{
double conversion(const double& a, const double& b);
}
我试图定义映射的头文件
namespace x
{
class main
{
public:
using abc = std::function<double(const double& t1, const double& t2)>;
main();
private:
std::map<std::pair<std::string, std::string>, abc> conversion_;
};
}
CPP 文件
namespace x
{
main::main()
{
conversion_.emplace(
std::make_pair("a", "b"),
std::bind(conversion, 3, std::placeholders::_1));
auto m = conversion_.find(std::make_pair("a", "b"))->second(4);
}
}
我猜 conversion
的功能与 double(const double& t1, const double& t2)
相同。如果是这样,std::bind(conversion, 3, std::placeholders::_1)
定义一个函子,它需要一个参数 a double
(conversion
的另一个参数固定为 3
)和 return double
.你只需要修改 abc
成 std::function<double(const double& t1)>;