【发布时间】:2014-10-25 10:43:42
【问题描述】:
我对 2 种方法有相同的实现,它们都将参数插入到文本文件中。
void WriteToFile( double content) //for double
{
streamFile << content;
streamFile << flush;
}
void WriteToFile( int content) //for integer
{
streamFile << content;
streamFile << flush;
}
实现是相同的,因此我将它们合并到一个模板方法:
template < class T>
void WriteToFile(T content)
{
streamFile << content;
streamFile << flush;
}
但是WriteToFile() 方法应该是虚拟的。
我该如何处理?
【问题讨论】:
-
把它们放回单独的函数...模板不能是
virtual。 -
@TonyD,难道没有诀窍吗?
-
@yaelaviv 我试过这样做。不,没有,除非您不介意破坏运行时多态性的能力。然后你可以(一种)使用CRTP 实现这一目标
-
@yaelaviv:这取决于“它”是什么......如果您使用模板只是为了避免基类实现中的重复代码,那么您可以调用非模板化成员函数执行实际工作的私有非虚拟模板成员函数,包括调用具有已知类型的虚拟函数(如果有帮助)。如果你想让一个类神奇地允许新的客户端代码为新类型调用它,并让额外的
virtual函数出现 - 不。虚拟函数的部分想法是虚拟调度表具有已知的大小和布局。 -
@TonyD,谢谢,“私有非虚拟模板成员函数”是什么意思?