gpt4 book ai didi

c++ - boost::filesystem:从 1.34.1 更新到当前版本

转载 作者:行者123 更新时间:2023-11-30 00:58:48 26 4
gpt4 key购买 nike

我这里有一些使用 1.34.1 版本中的 boost::filesystem 的遗留代码。我已将它隔离成一个小测试程序:

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

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

最佳答案

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

boost::filesystem::native 似乎旨在表明您提供的文件名是 native 格式。我相信当前版本的 boost::filesystem 应该会自动决定,并且由于您使用的是 POSIX 系统,所以无论如何它都没有区别。

简而言之,正确的做法是省略参数。

关于c++ - boost::filesystem:从 1.34.1 更新到当前版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5564767/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com