boost :: lexical_cast из строки в исключение char

Я новичок в использовании boost :: lexical_cast и минимально понимаю его внутреннее устройство. Я пытаюсь сделать следующее приведение:

string someString = boost::lexical_cast<char>(sourceString);

Однако boost жалуется, что приведенный выше код:

[Исключение]: неверное лексическое приведение: значение исходного типа не может быть интерпретировано как целевое.

Источником является строка, однако она всегда будет иметь длину всего 1 символ.

Может кто-нибудь объяснить?

Спасибо.


person czchlong    schedule 28.10.2011    source источник
comment
Была ли причина, по которой вы делаете это вместо чего-то вроде char c = *(sourceString.c_str());? И почему вы превращаете строку в символ и снова помещаете ее в строку?   -  person Seth Carnegie    schedule 28.10.2011
comment
Или, может быть, char c = sourceString[0];?   -  person Mike Seymour    schedule 28.10.2011
comment
@MikeSeymour, или ты мог бы просто сделать это ...   -  person Seth Carnegie    schedule 28.10.2011
comment
@set - извините, я неправильно написал эту часть, я хотел объявить ее как char. я мог бы это сделать, но я просто хотел бы понять, почему boost не может преобразовать его должным образом. Благодарность   -  person czchlong    schedule 28.10.2011
comment
Кроме того, это не будет компилироваться, поскольку вы не можете преобразовать char результат lexical_cast<char> в строку. Как только я это исправлю, код будет работать, пока sourceString содержит единственный символ.   -  person Mike Seymour    schedule 28.10.2011
comment
Что сказал @Mike; string не имеет конструктора, принимающего char. Возможно, вы могли бы сделать string someString(boost::lexical_cast<char>(sourceString), 1); и заставить его работать, но это действительно долгий путь. Тебе гораздо лучше делать char str = otherstr[0].   -  person Seth Carnegie    schedule 28.10.2011


Ответы (1)


Когда я его тестирую (после исправления недопустимого преобразования из char в string), лексическое приведение выполняется успешно, пока sourceString содержит единственный символ. Вот результаты теста.

Если ваш реальный код не работает, опубликуйте его еще раз; предпочтительно исполняемая программа, демонстрирующая ошибку.

person Mike Seymour    schedule 28.10.2011
comment
Спасибо за ответ. У меня есть вектор ‹string›, и я знаю, что строка в позиции с индексом x будет состоять только из одного символа, поэтому по сути я делаю следующее: char someChar = lexical_cast ‹char› (tokens [x]); это то, что вызывает ошибку. Извините, я должен был опубликовать это раньше. Спасибо. - person czchlong; 28.10.2011
comment
Возможно, вам стоит проверить свои предположения; добавьте assert(tokens[x].length() == 1); перед приведением, чтобы убедиться, что то, что вы знаете, действительно происходит. - person Mike Seymour; 28.10.2011
comment
да Майк, ты прав, мое предположение было неверным. Спасибо! - person czchlong; 28.10.2011