是否可以执行以下操作:
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);
答案 0 :(得分:5)
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
的含义:String Representation。简而言之,const char*
和RangeT
参数都不能接受数组(char [X]
)。
答案 1 :(得分:3)
为什么不发布正确的解决方案作为问题的答案?
const char* str = "AaBbCc";
std::string str_up = boost::to_upper_copy(std::string(str));
致康拉德的信用。
答案 2 :(得分:2)
当然!
inline std::string to_upper_copy(std::string const & src) {
std::string res(src);
boost::to_upper(res);
return res;
}