虚拟和模板方法C++

Virtual & Template method C++

本文关键字:C++ 模板方法 虚拟      更新时间:2023-10-16

我有两个方法的相同实现,它们都将参数插入到文本文件中。

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()方法应该是虚拟的
我该怎么处理?

您还不能创建虚拟模板化方法
但是,如果你想要模板,这样你就不必到处都有代码,你可以从重载的方法中调用模板化的方法(代码重用)

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++中

获得"模板化虚拟方法"的一个技巧是在基类中有一个模板化的非虚拟方法,完成所有模板工作,然后将结果以运行时多态形式传递给虚拟助手函数。例如,在基类中可以有一个template<typename T> void WriteToFile(T),它将参数转换为字符串,然后将该字符串传递给virtual void WriteToFile_aux(string)方法。

当然,这依赖于能够将参数多态性与亚型多态性分离开来。