我有两种类型:
struct A { }; struct B { };
void fnA(A); // there are a lot of these functions void fnB(B);
struct Foo { operator A(); operator B(); };
所以我可以调用fnA和fnB:
fnA(Foo()); // fine fnB(Foo());
void fn(A); void fn(B);
我无法用Foo调用它们,因为它含糊不清:
fn(Foo()); // ambiguous,which fn is called
我可以添加第三个fn重载:
inline void fn(Foo foo) { fn(A(foo)); }
但我不喜欢这种方式,因为我有很多fn函数,而且我不想大大增加函数的数量(我有fn-like函数遍布各处,这种改变会增加接口大小,这对我不好,因为我的界面已经很大了).
另一个解决方案(如果没有给出更好的替代方案,我会选择)是为Foo使用继承:
struct Foo: A { operator B(); };
在这种情况下,编译器将选择为fn(Foo())调用fn(A),它不再是模糊的.但是我对这个解决方案并不满意,因为Foo不是真正的A,它是对继承的误用(另一方面,它是一个比前一个更好的解决方案,因为它解决了本地问题,我不知道必须添加许多不需要的fn函数).
注意:我想要一个不涉及显式转换的解决方案,我希望能够编写fnA(Foo()),fnB(Foo())和fn(Foo()).
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。