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

dim*_*mba 2 c++ string boost

有可能做这样的事情:

const char* str = "AaBbCc";
string str_up = boost::to_upper_copy(str); // str_up will be "AABBCC"
Run Code Online (Sandbox Code Playgroud)

最后一行无法编译.

当然我可以如下,但它不那么"规范":

const char* str = "AaBbCc";

string str_up = str;
boost::to_upper(str_up);
Run Code Online (Sandbox Code Playgroud)

Unc*_*ens 5

声明to_upper_copy是:

template<typename SequenceT> 
SequenceT to_upper_copy(const SequenceT &, const std::locale & = std::locale());
Run Code Online (Sandbox Code Playgroud)

从这一点可以清楚地看出,SequenceT它不能是指向char,甚至是char数组的指针,因为没有(好的)方式返回的副本可以具有相同的类型.

您可以明确强制类型为string:

string str_up = boost::to_upper_copy<string>(str); 
Run Code Online (Sandbox Code Playgroud)

这里解释文档中的内容SequenceTRangeT含义:字符串表示.简而言之,两者都不是a const char*,但是RangeTarguments接受arrays(char [X]).