boost::trim each string in std::vectorlt;std::stringgt;(boost::trim 每个字符串在 std::vectorstd::string;)
问题描述
我目前无法找到修剪 std::vector 中每个字符串的正确语法.
我试过了
std::vectorv;std::for_each(v.begin(), v.end(), &boost::trim);
在 MSVC7.1 中给了我以下错误消息.
<块引用>错误 C2784:'_Fn1 std::for_each(_InIt,_InIt,_Fn1)':无法从带有 [_Ty=std:: 的'std::vector<_Ty>::iterator'推导出'T1'的模板参数string] : 见'std::for_each'的声明
错误 C2896:'_Fn1 std::for_each(_InIt,_InIt,_Fn1)':不能使用函数模板 'void boost::algorithm::trim(SequenceT &,const std::locale &)' 作为函数参数:参见'boost::algorithm::trim'的声明
如果我明确给模板参数trims,编译器找不到第二个参数,尽管它是默认设置的.
std::for_each(v.begin(), v.end(), &boost::trim<std::string>);
<块引用>
错误 C2198:'void (__cdecl *)(std::string &,const std::locale &)':通过函数指针调用的参数太少
我想知道为 v
中的每个元素调用 trim 的正确语法是什么样的.
你还需要绑定trim的第二个参数(locale):
std::vectorv;std::for_each(v.begin(), v.end(),boost::bind(&boost::trim<std::string>,_1, std::locale() ));
I'm currently stuck finding the correct syntax for trimming each string in a std::vector.
I tried
std::vector<std::string> v;
std::for_each(v.begin(), v.end(), &boost::trim);
which gave me the following error messages in MSVC7.1.
error C2784: '_Fn1 std::for_each(_InIt,_InIt,_Fn1)' : could not deduce template argument for 'T1' from 'std::vector<_Ty>::iterator' with [_Ty=std::string] : see declaration of 'std::for_each'
error C2896: '_Fn1 std::for_each(_InIt,_InIt,_Fn1)' : cannot use function template 'void boost::algorithm::trim(SequenceT &,const std::locale &)' as a function argument : see declaration of 'boost::algorithm::trim'
If I explicitly give the template parameter trims second parameter can not be found by the compiler, though its set by default.
std::for_each(v.begin(), v.end(), &boost::trim<std::string>);
error C2198: 'void (__cdecl *)(std::string &,const std::locale &)' : too few arguments for call through pointer-to-function
I was wondering how the correct syntax to call trim for each element in v
would look like.
You need to bind as well the second parameter of trim (the locale):
std::vector<std::string> v;
std::for_each(v.begin(), v.end(),
boost::bind(&boost::trim<std::string>,
_1, std::locale() ));
这篇关于boost::trim 每个字符串在 std::vector<std::string>;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:boost::trim 每个字符串在 std::vector<std::string>;
基础教程推荐
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 从 std::cin 读取密码 2021-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- Windows Media Foundation 录制音频 2021-01-01
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01