Virtual & Template method C++
我对两个方法有相同的实现,它们都将参数插入到文本文件中。
1 2 3 4 5 6 7 8 9 10 11 | void WriteToFile( double content) //for double { streamFile << content; streamFile << flush; } void WriteToFile( int content) //for integer { streamFile << content; streamFile << flush; } |
实现是相同的,因此我将它们合并到模板方法:
1 2 3 4 5 6 | template < class T> void WriteToFile(T content) { streamFile << content; streamFile << flush; } |
但是
您还不能创建虚拟模板化方法。但是,如果您希望模板不必到处都有代码,您可以从重载方法中调用模板化方法(代码重用):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | template < class T> void WriteToFileT(T content) { streamFile << content; streamFile << flush; } virtual void WriteToFile( double content) //for double { WriteToFileT(content); } virtual void WriteToFile( int content) //for integer { WriteToFileT(content); } |
关于这个有很多讨论…
C++类成员函数模板可以是虚拟的吗?C++虚拟模板方法如何在C++中实现"虚拟模板功能"
获得"模板化虚拟方法"的一个技巧是在基类中有一个模板化的非虚拟方法,执行所有模板化操作,然后将结果以运行时多态形式传递给虚拟助手函数。例如,您可以在基类中有一个
当然,这依赖于能够将参数多态性与子类型多态性分开。