boost::filesystem3 (моя не понимает)
От: nen777w  
Дата: 17.08.11 21:34
Оценка:
Что то они там намудрили.
В предыдущих версиях 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 и пересобирать библиотеку?
Re: boost::filesystem3 (моя не понимает)
От: Ops Россия  
Дата: 17.08.11 22:49
Оценка:
Здравствуйте, nen777w, Вы писали:

Простите, Вы не из Эстонии случайно? О замене 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.

http://www.boost.org/doc/libs/1_47_0/libs/filesystem/v3/doc/index.htm
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[2]: boost::filesystem3 (моя не понимает)
От: nen777w  
Дата: 17.08.11 23:14
Оценка:
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.

Ops>http://www.boost.org/doc/libs/1_47_0/libs/filesystem/v3/doc/index.htm

понятно. т.е. совместимости они не гарантируют.
потому как вот такой просто бесполезный (с первого взгляда) код успешно компилируется для v2 и не успешно для v3

#include <vector>

#include "boost/filesystem.hpp"
#include "boost/phoenix.hpp"

void    foo()
{
    using boost::phoenix::lambda;
    using boost::phoenix::placeholders::_1;

    std::vector<boost::filesystem::path::string_type> v;

    v.push_back("boost");
    v.push_back("0");
    v.push_back("boost");
    v.push_back("3");

    std::for_each(v.begin(), v.end()
        , lambda[
            if_( "boost" == _1)
                [
                    _1 = "tsoob"
                ]
        ] ()
    );
}


ладно будем мудрить тогда с v3. спасибо.
Re[3]: boost::filesystem3 (моя не понимает)
От: Ops Россия  
Дата: 18.08.11 00:05
Оценка:
Здравствуйте, nen777w, Вы писали:

N>ладно будем мудрить тогда с v3. спасибо.


Мне 3 версия понравилась больше 2-й, логичнее устроена что ли.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re: boost::filesystem3 (моя не понимает)
От: Centaur Россия  
Дата: 18.08.11 02:45
Оценка: 1 (1)
Здравствуйте, 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*.
Re: boost::filesystem3 (моя не понимает)
От: Ytz https://github.com/mtrempoltsev
Дата: 18.08.11 05:28
Оценка:
Здравствуйте, nen777w, Вы писали:

N>Что то они там намудрили.


Это хорошо и правильно. Что-бы у тебя не было проблем используй тот-же подход у себя — typedef std::basic_string<value_type> string_type и везде его используй вместо std::string.
Re[4]: boost::filesystem3 (моя не понимает)
От: nen777w  
Дата: 18.08.11 06:35
Оценка:
Ops>Мне 3 версия понравилась больше 2-й, логичнее устроена что ли.
да, вы правы, разобрался. эт Я чего то вчера затупил, инерция блин. топик можно закрыть.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.