gpt4 book ai didi

c++ - 二元运算符的最佳命名空间是什么?

转载 作者:可可西里 更新时间:2023-11-01 15:56:44 26 4
gpt4 key购买 nike

为了优雅,封装和利用 ADL ( Argument Dependent Lookup ) 通常在函数参数的命名空间内定义函数。

假设我在不同的命名空间中有两个库。有三种情况 1) 一个是我控制的库的一部分,另一个是第三方(例如 Boost),或者 2) 我控制两者,或者 3) 我什么都不控制(只是编写“胶水”代码)。

我有这样的东西,

namespace ns_A{
struct A{...}; // something that looks like iostream
}
namespace ns_B{
struct B{...};
}

我想将 B“流”到 A,什么是最好的选择

namespace ???{ // what is more correct ns_A, or ns_B?
A& operator<<(A& a, B const& b){...}
}

还是我应该把它放在两个命名空间中?

namespace ns_B{
A& operator<<(A& a, B const& b){...}
}
namespace ns_A{
using ns_B::operator<<;
}

哪个命名空间最适合定义这样的二进制函数?

(C++11 的命名空间内联是否改变了任何建议?)

(我使用示例 operator<< 因为,在其他条件相同的情况下,似乎直觉上更喜欢 namespace ns_B 更好。)


编辑:这是我能找到的关于实际使用命名空间的最完整的指南和引用 https://www.google.com/amp/s/akrzemi1.wordpress.com/2016/01/16/a-customizable-framework/amp/

最佳答案

情况 1 很简单:将它放在您控制的 namespace 中。

在情况 2 中,这取决于您的选择:任何看起来更合乎逻辑的。在您的示例中,我更喜欢 ns_B

唯一棘手的情况是 3。您不应该真正添加到任何一个 namespace。如果您希望将新的“胶水”功能作为您自己的第三个命名空间矿山的一部分,那么很自然地将它放在那里,并且在矿山中对该功能的任何使用都将自动解析.当然,这不会调用 ADL,但也没有必要,因为您只想在 mine 中使用新功能,而不是在其他地方。

关于c++ - 二元运算符的最佳命名空间是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34675957/

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