c++ - 在匿名命名空间中定义自定义相等运算符
问题描述
我有一个 C 结构(在 C 头文件中),如下所示:
struct Foo {
int a;
int b;
int c;
};
typedef struct Foo Foo;
我想测试这些结构的两个向量的相等性,因此我想为这个结构定义一个自定义相等运算符,仅用于我的翻译单元。
我可以这样做
static inline bool operator==(const Foo&, const Foo&) {...}
但不与
namespace {
bool operator==(const Foo&, const Foo&) {...}
}
为什么 std::vector 的相等模板找不到这个运算符,有没有比在全局命名空间中扔静态内联更好的方法?
解决方案
我想你会发现std::vector
实际上确实在匿名命名空间中找到了该运算符,如果该运算符的声明出现在#include <vector>
.
它在您的代码中找不到它的原因与模板函数中名称的两阶段查找有关。第一阶段在范围内的所有命名空间中查找候选者。第二阶段仅查找从属名称。正如短语所说,搜索包含类型的名称空间的“参数相关查找”是依赖的。匿名命名空间中的查找是不依赖的,因此不会在第二阶段完成。
也可以看看:
推荐阅读
- google-cloud-sql - GCP 的 CloudSQL - 重新创建现有的只读副本
- ocaml - 取消引用指针 OCaml 时匹配总是成功
- python - 在 TFRS 中使用 NDCG@5 度量进行训练和验证
- css - 有没有办法在 CSS 中制作自定义边框?
- node.js - 在 express api 中使用节点集群总是有益的吗?
- java - 如何处理 MissingKotlinParameterException
- vue.js - 多选组件标签作为编号
- ffmpeg - 将带有时间线编辑(启用)的 ffmpeg 视频 delogo 过滤器应用于多个区域和多个时间帧不起作用
- r - 如何制作大表(由 3 个变量分隔)以显示第 4 个变量的百分比
- c - 为什么这个 C 代码输出 1 而不是 0?