gpt4 book ai didi

c++ - 如何替换从 boost::filesystem::weakly_relative 和 std::filesystem::canonical 中删除的基本参数

转载 作者:太空宇宙 更新时间:2023-11-04 12:52:41 33 4
gpt4 key购买 nike

函数 boost::filesystem::canonical() ( doc of 1.66 , doc of current release ) 提供两个参数(忽略错误代码重载)base。第一个是要规范化的路径,第二个参数是用于使第一个路径成为绝对路径(如果它是相对路径)的基本路径。默认情况下,current_path() 用于此参数。

Boost 1.60 引入了一些新函数,其中包括 boost::filesystem::weakly_canonical()(doc of 1.66doc of current release)。此函数缺少第二个参数。标准化 (C++17) 变体 std::filesystem::canonical()std::filesystem::weakly_canonical() 也是如此(参见 cppreference ).

我想将 canonical()weakly_canonical() 交换,但我使用了第二个参数。这就是我意识到这个论点被删除的方式。现在我想知道为什么它被删除以及我如何使路径成为绝对路径。

我发现了一个 defect report 暗示 this resolution for C++17 ,但坦白说我真的不明白其中的道理。我很高兴有一个解释,或者更好的例子,其中 base 的重载会被过度指定。

当然,我想知道我应该如何使用不是当前目录的基目录将相对路径转换为绝对路径。我是否应该像 cppreference for std::filesystem::absolute() 上提示的那样简单地使用 base/p 因为我知道这是我的目标系统(带有 Visual C++ 的 Windows)上的正确形式?

最佳答案

OK,下面是当你有一个相对路径并且想要调用这样一个函数时,你可能会遇到的情况:

  1. 您知道该路径是相对于 current_path 的。
  2. 您知道可以通过调用absolute 使路径成为绝对路径。请注意,由于像 Windows 这样的文件系统,这与说它相对于 current_path不同的
  3. 您知道该路径是相对于某个已知的 absolute_path 而不是当前路径的。
  4. 你不知道路径是否是相对路径。

在案例 #4 中,您的第一步需要确定它是否是相对的,如果是,它是相对于什么。完成后,您将返回案例 1-3。

在 1-3 的每一种情况下,您都有一种直接的方法来计算绝对路径。在情况 1 中,您使用 current_path()/rel。在情况 2 中,您使用 absolute(rel)。在情况 3 中,您使用 absolute_path/rel。 (注意:这不仅是“我的目标系统(带有 Visual C++ 的 Windows)上的正确形式”,这是正确的形式 period。)

canonical/weakly_canonical 的原始版本中,函数仅处理情况 1 和情况 3。情况 2 无法在函数内处理。通过使函数处于较低级别,通过使它们对相对路径使用 absolute 而不是采用默认为 current_path() 的基本路径,这允许函数处理大小写2 以及其他情况。

他们本可以更改它,以便有不采用路径的重载(而不是使用 absolute 的默认 current_path())。但实际上,canonical(rel, absolute_path)canonical(absolute_path/rel) 有什么区别?事实上,后者使您在做什么更清楚,因为它将绝对路径放在左侧,也就是它的去向。

关于c++ - 如何替换从 boost::filesystem::weakly_relative 和 std::filesystem::canonical 中删除的基本参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48229510/

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