![](/img/trans.png)
[英]boost math special functions compilation error when using boost for TR1
[英]map of string and functions using boost gives compilation error
我正在尝试实现我的程序片段的字符串和函数映射。
我有以下实施
void foo1(const std::string)
void foo2(const std::string)
void foo3(const std::string)
typedef boost::function<void, const std::string> fun_t;
typedef std::map<std::string, fun_t> funs_t;
funs_t f;
f["xyz"] = &foo1;
f["abc"] = &foo2;
f["pqr"] = &foo3;
std::vector<std::future<void>> tasks;
for(std::string s: {"xyz", "abc", "pqr"}){
tasks.push_back(std::async(std::launch::async, f.find(f_kb)->second, s));
}
for(auto& task : tasks){
task.get();
}
它给我在线错误
f["xyz"] = &foo1;
从这里需要
usr/local/include/boost/function/function_template.hpp225:18: error: no match for call to '(boost::_mfi::mf1<void, Class sample, std::basic_string<char>>)(const std::basic_string<char> &)'
BOOST_FUNCTION_RETURN(boost::mem_fn(*f)(BOOST_FUNCTION_ARGS));
有人可以告诉我代码有什么问题吗?
我认为对function<>
的评论是正确的。
这是您可以修复的示例:
#include <boost/function.hpp>
#include <future>
#include <map>
#include <iostream>
void foo1(std::string const& s) { std::cout << __PRETTY_FUNCTION__ << "(" << s << ")\n"; }
void foo2(std::string const& s) { std::cout << __PRETTY_FUNCTION__ << "(" << s << ")\n"; }
void foo3(std::string const& s) { std::cout << __PRETTY_FUNCTION__ << "(" << s << ")\n"; }
typedef boost::function<void(std::string const&)> fun_t;
typedef std::map<std::string, fun_t> funs_t;
int main() {
funs_t f;
f["xyz"] = &foo1;
f["abc"] = &foo2;
f["pqr"] = &foo3;
std::vector<std::future<void>> tasks;
for(std::string s: {"xyz", "abc", "pqr"}){
tasks.push_back(std::async(std::launch::async, f.find(s)->second, s));
}
for(auto& task : tasks){
task.get();
}
}
打印类似:
void foo3(const string&)(pqr)
void foo2(const string&)(abc)
void foo1(const string&)(xyz)
(输出取决于线程调度,线程调度是实现定义的和不确定的)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.