Ell*_*ods 5 c++ polymorphism templates template-specialization
如果我有
template<class T>
TalkyBuffer& operator<<(T const &object) { // Template
...
}
TalkyBuffer& operator<<(TalkySerialisable const &object); // Override
Run Code Online (Sandbox Code Playgroud)
和一个班级
class A : public TalkySerialisable {
...}
Run Code Online (Sandbox Code Playgroud)
然后如果我表演
TalkyBuffer b;
A test;
b << test;
Run Code Online (Sandbox Code Playgroud)
然后gcc调用Template函数而不是Override函数
但是,如果我专门定义覆盖
TalkyBuffer& operator<<(A const &object); // Override without polymorphism
Run Code Online (Sandbox Code Playgroud)
然后gcc挑选那一个.是否有一种用抽象类覆盖模板化函数的实用方法?
我读过这篇文章,但它没有说明当你将多态性投入混合时会发生什么:http: //www.gotw.ca/publications/mill17.htm 此外我找不到解决方案,但也许我是使用错误的条款.
定义函数时,TalkyBuffer& operator<<(TalkySerialisable const &object);
您没有覆盖。您正在重载 tmeplate 函数。
但是,当编译器看到 时b << test;
,它会搜索需要A
. 它有一个,它是不需要自动转换的模板化函数。这是最好的选择。
重载函数需要对参数进行自动转换(从 A 到 TalkySerialisable)以适合声明,这不是最佳选择。