虚拟&模板方法C ++

时间:2014-09-01 08:36:31

标签: c++ templates virtual

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

2 个答案:

答案 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)方法。

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