![](/img/trans.png)
[英]boost to_upper function of string_algo doesn't take into account the locale
[英]boost to_upper char pointer in one expression
有可能做这样的事情:
const char* str = "AaBbCc";
string str_up = boost::to_upper_copy(str); // str_up will be "AABBCC"
最后一行无法编译。
当然我可以如下,但它不那么“规范”:
const char* str = "AaBbCc";
string str_up = str;
boost::to_upper(str_up);
to_upper_copy
的声明是:
template<typename SequenceT>
SequenceT to_upper_copy(const SequenceT &, const std::locale & = std::locale());
从这一点可以清楚地看出, SequenceT
不能是指向char,甚至是char数组的指针,因为没有(好的)方式返回的副本可以具有相同的类型。
您可以显式强制类型为string
:
string str_up = boost::to_upper_copy<string>(str);
这里解释了SequenceT
和RangeT
在文档中的含义: 字符串表示 。 简而言之,两者都不能是const char*
,但RangeT
参数接受数组( char [X]
)。
为什么不发布正确的解决方案作为问题的答案?
const char* str = "AaBbCc";
std::string str_up = boost::to_upper_copy(std::string(str));
对康拉德的信用。
当然!
inline std::string to_upper_copy(std::string const & src) {
std::string res(src);
boost::to_upper(res);
return res;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.