繁体   English   中英

在一个表达式中提升to_upper char指针

[英]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); 

这里解释了SequenceTRangeT在文档中的含义: 字符串表示 简而言之,两者都不能是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM