使用多态函数覆盖模板化函数

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 此外我找不到解决方案,但也许我是使用错误的条款.

Did*_*set 1

定义函数时,TalkyBuffer& operator<<(TalkySerialisable const &object);您没有覆盖。您正在重载 tmeplate 函数。

但是,当编译器看到 时b << test;,它会搜索需要A. 它有一个,它是不需要自动转换的模板化函数。这是最好的选择。

重载函数需要对参数进行自动转换(从 A 到 TalkySerialisable)以适合声明,这不是最佳选择。