gpt4 book ai didi

c++ - 在匿名命名空间中定义自定义相等运算符

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:21:41 24 4
gpt4 key购买 nike

我有一个 C 结构(在 C 头文件中),如下所示:

struct Foo {
int a;
int b;
int c;
};
typedef struct Foo Foo;

我想测试这些结构的两个 vector 是否相等,因此我想为我的翻译单元为此结构定义一个自定义相等运算符。

我可以这样做

static inline bool operator==(const Foo&, const Foo&) {...}

但不是

namespace {
bool operator==(const Foo&, const Foo&) {...}
}

为什么 std::vector 的相等模板找不到这个运算符,有没有比在全局命名空间中扔一个静态内联更好的方法?

最佳答案

我想你会发现 std::vector实际上确实在匿名命名空间中找到了运算符,如果该运算符的声明发生在#include <vector>之前。 .

它在您的代码中找不到它的原因与模板函数中名称的两阶段查找有关。第一阶段在范围内的所有 namespace 中找到候选者。第二阶段仅查找从属名称。搜索包含该类型的 namespace 的“依赖于参数的查找”就像短语所说的那样是依赖的。匿名命名空间中的查找是不依赖的,因此在第二阶段不会完成。

另见:

关于c++ - 在匿名命名空间中定义自定义相等运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55390265/

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