boost :: filesystem: Обновление с 1.34.1 до текущей - PullRequest
1 голос
/ 06 апреля 2011

У меня есть некоторый устаревший код, который использует boost :: filesystem в версии 1.34.1.Я выделил его в небольшую тестовую программу:

#include <iostream>

#include <boost/filesystem/path.hpp>

int main()
{
    // note the second parameter
    boost::filesystem::path p( "/tmp/foo", boost::filesystem::native );
    std::cout << p.string() << std::endl;
    return 0;
}

Когда я пытаюсь скомпилировать этот код с текущей (1.46.1) версией Boost, я получаю следующую ошибку:

test.cpp: In function ‘int main()’:
test.cpp:7: error: invalid conversion from ‘bool (*)(const std::string&)’ to ‘void*’
test.cpp:7: error:   initializing argument 2 of ‘boost::filesystem3::path::path(const Source&, typename boost::enable_if<boost::filesystem3::path_traits::is_pathable<typename boost::decay<T>::type>, void>::type*) [with Source = char [9]]’

Я пытался сделать заголовки или хвосты документации Boost, но я не могу понять, для чего этот второй параметр хорош или чем его заменить.Кто-нибудь может пролить свет на это?

ОБНОВЛЕНИЕ: Я не совсем понял требования.Как минимум, для переходного периода мне придется поддерживать обе версии (1.34.1 и 1.46.1).Есть ли совместимый способ покрыть обе версии Boost одним и тем же кодом, или мне придется прибегнуть к #if BOOST_VERSION magic?

UPDATE 2: Используется #if BOOST_VERSION ..., так как больше нетмнение было предстоящее.Спасибо за помощь.

Ответы [ 2 ]

4 голосов
/ 06 апреля 2011

boost :: filesystem определяет два формата имен файлов: native, который отличается от системы к системе, и generic, который одинаков для всех систем. Под POSIX (который, кажется, вы используете) они идентичны. В Windows собственный формат допускает обратную косую черту, а общий формат - нет. Под VMS (например) они очень разные (нативный формат что-то вроде [dir.subdir]file).

boost::filesystem::native, по-видимому, предназначено для указания того, что имя файла, которое вы предоставляете, имеет собственный формат. Я полагаю, что текущая версия boost :: filesystem должна определиться автоматически, и, поскольку вы работаете в системе POSIX, в любом случае это не имеет значения.

Короче говоря, правильнее всего просто пропустить параметр.

2 голосов
/ 06 апреля 2011

native теперь кажется функцией, а конструктору path не нужен собственный спецификатор. Так что просто удалить его должно быть хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...