我对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()
方法应该是虚拟的
我该如何处理?
答案 0 :(得分:2)
您无法创建虚拟模板化方法(尚) 但是,如果你想要模板只是为了不必在任何地方都有代码,你可以从重载方法中调用模板化方法 (Code reuse) :
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);
}
关于这个问题有很多讨论...
Can a C++ class member function template be virtual?
C++ Virtual template method
How to achieve "virtual template function" in C++
答案 1 :(得分:1)
获得模拟虚拟方法的一个技巧&#34;是在基类中有一个模板化的非虚方法,执行所有模板化的东西,然后将结果以运行时多态形式传递给虚拟辅助函数。例如,在这里你可以在基类中有一个template<typename T> void WriteToFile(T)
,它将参数转换为一个字符串,然后将该字符串传递给virtual void WriteToFile_aux(string)
方法。
当然,这依赖于能够将参数多态性与子类型多态性分开。