我用的是Cstruct
(我无法控制)并写了一个独立的operator==
在命名空间中实现它。我还有另一个班级有 Cstruct
作为会员,并且还拥有operator==
执行。本来我有:
#include <tuple>
struct Foo
{
int x;
};
struct Bar
{
Foo foo;
int y;
};
namespace foo_ops
{
bool operator==(const Foo& f1, const Foo& f2)
{
return f1.x == f2.x;
}
}
bool operator==(const Bar& b1, const Bar& b2)
{
using namespace foo_ops;
return b1.foo == b2.foo && b1.y == b2.y;
}
这有效。我想改变operator==(const Bar&, const Bar&)
to use std::tuple
反而:
bool operator==(const Bar& b1, const Bar& b2)
{
using namespace foo_ops;
auto asTuple = [](const Bar& b)
{
return std::tie(b.foo, b.y);
};
return asTuple(b1) == asTuple(b2);
}
但这无法解决,因为编译器不会选择foo_ops::operator==
当比较时Foo
成员。依赖于参数的查找在这里没有帮助,因为Foo
struct
在与相应的名称空间不同的名称空间中声明operator==
.
如果我添加一个,它显然会起作用using foo_ops::operator==;
全局范围内的声明。如果在函数的作用域中使用该声明,则没有帮助。一个全球范围的using namespace foo_ops;
指令也没有帮助。
我的问题:
-
有什么办法可以得到std::tuple::operator==
选择foo_ops::operator==
没有全球范围的using
宣言? (或者也许我应该放弃operator==(const Foo&, const Foo&)
住在一个单独的命名空间中并将其移至全局命名空间?)我怀疑答案是否定的,并且using foo_ops::operator==;
还不错,但也许我错过了一些替代方案。
-
并不是说我真的想使用全球范围的using namespace foo_ops;
指令,但为什么会失败using foo_ops::operator==;
成功了吗?
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)