2011-04-06 63 views
1

我在这里有一些遗留代码,它使用1.34.1版本中的boost :: filesystem。我孤立它变成一个小的测试程序: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)版本,我得到以下错误:

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魔法?

UPDATE 2:使用#if BOOST_VERSION ...因为没有进一步的意见即将到来。谢谢您的帮助。

回答

4

boost :: filesystem为文件名定义了两种格式:native,它不同于系统,系统之间通用。在POSIX下(这似乎是你正在使用的),两者是相同的。在Windows下,原生格式允许反斜杠,而通用格式则不允许。在VMS下(例如),两者非常不同(原生格式类似于[dir.subdir]file)。

boost::filesystem::native似乎是用来表示您提供的文件名是以原生格式。我相信boost :: filesystem的当前版本应该是自动决定的,因为你在POSIX系统上,它无论如何都没有区别。

总之,正确的做法是简单地省略参数。

+0

这非常有帮助,如果我对这些要求不是太模糊的话,它会获得“正确答案”复选标记。查看更新的问题。 – DevSolar 2011-04-06 14:43:17

2

native现在似乎是一个函数,并且path构造函数似乎不需要本地说明符。所以只是删除它应该没问题。

+0

查看更新的问题;对不起,从一开始就不清楚。 – DevSolar 2011-04-06 14:43:40