Повысить ошибку компиляции при преобразовании UUID в строку, используя boost :: lexical_cast

У меня есть этот код, который основан на нескольких сообщениях в SO:

boost::uuids::uuid uuid = boost::uuids::random_generator()();
auto uuidString= boost::lexical_cast<std::string>(uuid);

но когда я компилирую этот код, я получаю эту ошибку:

Source type is neither std::ostream`able nor std::wostream`able     C:\Local\boost\boost\lexical_cast\detail\converter_lexical.hpp

Как я могу исправить эту ошибку?

5

Решение

Вы пропустили включение, я думаю:

Жить на Колиру

#include <boost/lexical_cast.hpp>
#include <boost/uuid/uuid_io.hpp>
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/random_generator.hpp>

int main() {
boost::uuids::uuid uuid = boost::uuids::random_generator()();
auto uuidString = boost::lexical_cast<std::string>(uuid);
}
8

Другие решения

Вы можете попробовать:

std::stringstream ss;
std::string       uuidStr;

boost::uuids::uuid uuid = boost::uuids::random_generator()();

ss << uuid;
ss >> uuidStr;

Документация состояния:

Операторы потока

Стандартные операторы потока ввода и вывода << и >> обеспечиваются включением boost / uuid / uuid_io.hpp. Строковое представление uuid: hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh, где h — шестнадцатеричная цифра.

boost::uuids::uuid u1; // initialize uuid

std::stringstream ss;
ss << u1;

boost::uuids::uuid u2;
ss >> u2;

assert(u1, u2);

Тем не менее lexical_cast должно работать так же.

Может быть, вы должны проверить, что uuid на самом деле содержит, чтобы выяснить, если что-то не так с сгенерированным uuid,

Также:

boost::uuids::uuid u; // initialize uuid

std::string s1 = to_string(u);

должно быть немного быстрее в соответствии с док.

2

По вопросам рекламы [email protected]