使用boost的字符串和函数映射会导致编译错误
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<>
的评论是正确的。
这是你的样本修复工作:
Live On Coliru
#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)
(输出取决于线程调度,这是实现定义的,不确定的)
相关文章:
- std::is_base_of表示ctor编译错误
- Qt5:使用QCommandLineParser类时出现奇怪的编译错误
- 如何修复sfml c++代码编译错误
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- vscode下的Arduino代码出现意外编译错误
- 第三方 API 中的编译错误 - Visual Studio
- std::cout输出int时出现编译错误
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- 提升图广度优先搜索前置编译错误
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 使用带有 ref 参数的成员函数创建线程时出现编译错误
- 我在C++中遇到了这个奇怪的编译错误
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 使用 std::enable_if 限制派生类的模板参数时出现编译错误
- 现代OpenGL和GLEW Libraray的编译错误
- C++ 编译错误:意外的类型名称"字符串":预期的表达式
- C ++程序编译错误,找不到/访问文件
- 使用直接大括号初始化时,C++ 编译错误"声明末尾的预期";"
- 为什么传递非静态成员函数会导致编译错误?