Что то они там намудрили.
В предыдущих версиях filesystem2
был path и wpath (который собственно basic_path)
который параметризовался либо std::string либо std::wstring соответственно
у которого
string_type был либо std::string либо std::wstring
А вот в filesystem3 они там чего такого в path намутили:
# ifdef BOOST_WINDOWS_API
typedef wchar_t value_type;
# else
typedef char value_type;
# endif
typedef std::basic_string<value_type> string_type; //<-- вот нафига? это теперь никак не совместимо с std::string/wstring (например в lambda выражениях)
при том что wpath по прежнему существует правда теперь вот такой:
# ifndef BOOST_FILESYSTEM_NO_DEPRECATED
typedef path wpath;
# endif
Бегло посмотрев хидера Я так понимаю что бы filesystem стал filesystem2 нужно менять макросы в boost_config.hpp и пересобирать библиотеку?
Простите, Вы не из Эстонии случайно? О замене 2 на 3 писали еще зимой.
N>Бегло посмотрев хидера Я так понимаю что бы filesystem стал filesystem2 нужно менять макросы в boost_config.hpp и пересобирать библиотеку?
Building the library
By default, the Boost build system creates libraries that support both version 2 and version 3. To support only a single version, include --disable-filesystem2 or --disable-filesystem3 on the bjam command line.
Ну и на всякий случай:
Existing code should be moved to Version 3 as soon as convenient. New code should be written for Version 3.
Version 2 is deprecated, and will not be included in Boost releases 1.48 and later.
Ops>Простите, Вы не из Эстонии случайно? О замене 2 на 3 писали еще зимой.
нет не из Эстонии
значит это как то мимо меня прошло.
А теперь вот захотелось переписать кой чего в старом проекте с новым бустом.
N>>Бегло посмотрев хидера Я так понимаю что бы filesystem стал filesystem2 нужно менять макросы в boost_config.hpp и пересобирать библиотеку?
Ops>
Ops>Building the library
Ops>By default, the Boost build system creates libraries that support both version 2 and version 3. To support only a single version, include --disable-filesystem2 or --disable-filesystem3 on the bjam command line.
гм... понятно.
Ops>Ну и на всякий случай:
Ops>
Ops>Existing code should be moved to Version 3 as soon as convenient. New code should be written for Version 3.
Ops>Version 2 is deprecated, and will not be included in Boost releases 1.48 and later.
понятно. т.е. совместимости они не гарантируют.
потому как вот такой просто бесполезный (с первого взгляда) код успешно компилируется для v2 и не успешно для v3
Здравствуйте, nen777w, Вы писали:
N>А вот в filesystem3 они там чего такого в path намутили:
N># ifdef BOOST_WINDOWS_API
N> typedef wchar_t value_type;
N># else
N> typedef char value_type;
N># endif
N> typedef std::basic_string<value_type> string_type; //<-- вот нафига? это теперь никак не совместимо с std::string/wstring (например в lambda выражениях)
Это прекрасно. Пути под виндой должны быть юникодными. И логично держать их в UCS-2/UTF-16, поскольку всё API работает так.
Пути же под *nix’ами должны быть байтовыми строками без интерпретации. И их логично держать в string<char>, опять-таки потому, что всё API принимает char*.
Здравствуйте, nen777w, Вы писали:
N>Что то они там намудрили.
Это хорошо и правильно. Что-бы у тебя не было проблем используй тот-же подход у себя — typedef std::basic_string<value_type> string_type и везде его используй вместо std::string.
Ops>Мне 3 версия понравилась больше 2-й, логичнее устроена что ли.
да, вы правы, разобрался. эт Я чего то вчера затупил, инерция блин. топик можно закрыть.