boost::split 参数不匹配
我试图将 AnsiString(someStr).c_str()
传递给 boost::split()
第二个参数,但它拒绝显示参数不匹配!
这是代码片段
vector<std::string> sVec;
boost::split(sVec,AnsiString(response).c_str(),boost::is_any_of(" "));//err in this line
ShowMessage(sVec[1].c_str());
然而
boost::split(sVec,"这是一个测试",boost::is_any_of(" "));
效果很好!
我将 AnsiString 转换为 c 字符串类型正确吗???
I am trying to pass AnsiString(someStr).c_str()
to boost::split()
second argument but it denies showing argument mismatch!!
here is the code snippet
vector<std::string> sVec;
boost::split(sVec,AnsiString(response).c_str(),boost::is_any_of(" "));//err in this line
ShowMessage(sVec[1].c_str());
however
boost::split(sVec,"This is a test",boost::is_any_of(" "));
works well!
Am I doing right converting AnsiString to c string type???
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
由于
sVec
是vector
而不是vector
,因此第二个参数传递给split()
必须以某种方式转换为std::string
实例。std::string
类中有一个隐式构造函数,可以透明地从const char *
创建实例(这就是第二个示例成功的原因),但是 AnsiString::c_str() 返回一个char *
,而不是一个const char *
,所以这个构造函数不适用。自己执行转换应该可以解决您的问题:
或者更明确地说:
Since
sVec
is avector<std::string>
and not avector<char *>
, the second argument passed tosplit()
has to be somehow converted into astd::string
instance.There is an implicit constructor in the
std::string
class that can transparently create an instance from aconst char *
(which is why your second example succeeds), but AnsiString::c_str() returns achar *
, not aconst char *
, so this constructor does not apply.Performing the conversion yourself should solve your problem:
Or, more explicitly:
我这样做是因为
boost::split(sVec, (const char *) AnsiString(response).c_str(),
给出错误(不幸的是)boost::is_any_of(" "));
I did it in this way since
boost::split(sVec, (const char *) AnsiString(response).c_str(),
gives error (unfortunately)boost::is_any_of(" "));