увеличить to_upper символьный указатель в одном выражении - PullRequest
2 голосов
/ 17 марта 2011

Можно ли сделать что-то вроде:

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);

Ответы [ 3 ]

5 голосов
/ 17 марта 2011

Декларация to_upper_copy:

template<typename SequenceT> 
SequenceT to_upper_copy(const SequenceT &, const std::locale & = std::locale());

Из этого должно быть ясно, что SequenceT не может быть указателем на символ или даже массивом символов, потому что нет (хорошего) способа, как возвращаемая копия могла бы иметь такой же тип.

Вы можете явно указать тип string:

string str_up = boost::to_upper_copy<string>(str); 

Вот объяснение того, что SequenceT и RangeT означают в документации: Представление строки . Короче говоря, ни один из них не может быть const char*, но RangeT аргументы принимают массивы (char [X]).

3 голосов
/ 18 марта 2011

Почему бы не опубликовать правильное решение в качестве ответа на вопрос?

 const char* str = "AaBbCc";
 std::string str_up = boost::to_upper_copy(std::string(str));

Кредиты Конраду.

2 голосов
/ 17 марта 2011

Конечно!

inline std::string to_upper_copy(std::string const & src) {
   std::string res(src);
   boost::to_upper(res);
   return res;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...