如果我有
template<class T>
TalkyBuffer& operator<<(T const &object) { // Template
...
}
TalkyBuffer& operator<<(TalkySerialisable const &object); // Override
和一个班级
class A : public TalkySerialisable {
...}
那么如果我执行
TalkyBuffer b;
A test;
b << test;
然后 gcc 正在调用 Template 函数而不是 Override 函数
但是,如果我专门定义一个覆盖
TalkyBuffer& operator<<(A const &object); // Override without polymorphism
然后 gcc 选择那个。
有没有一种实用的方法可以用抽象类覆盖模板化函数?
我读过这篇文章,但它并没有阐明当你将多态性融入其中时会发生什么:http://www.gotw.ca/publications/mill17.htm http://www.gotw.ca/publications/mill17.htm另外,我在这里找不到解决方案,但也许我使用了错误的术语。
定义函数时TalkyBuffer& operator<<(TalkySerialisable const &object);
你没有凌驾于一切之上。您正在重载 tmeplate 函数。
但是,当编译器看到b << test;
,它会搜索一个想要的操作符A
。它有一个,它是不需要自动转换的模板化函数。这是最好的选择。
重载函数需要对参数进行自动转换(从 A 到 TalkySerialisable)以适合声明,这不是最佳选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)