【发布时间】:2012-02-13 17:29:54
【问题描述】:
以前,我确信你不能这样做,但前几天我正在玩一些代码,它似乎可以编译和工作。我只是想验证我不只是走运。模板类可以有一个纯虚函数吗?我猜这也意味着纯虚方法对析构函数也有效?
template <typename WordType> class DataSource
{
public:
DataSource();
DataSource(DataSource const& other);
virtual ~DataSource();
virtual void Put(
WordType const* const data,
unsigned int const wordCount) = 0;
}
我已经尝试在网上查找它,我所能找到的只是在普通类中不能有虚拟方法(纯或其他),例如:
class DataSource
{
public:
DataSource();
DataSource(DataSource const& other);
virtual ~DataSource();
template <typename WordType>
virtual void Put(
WordType const* const data,
unsigned int const wordCount) = 0;
}
这是由于无法管理虚拟表来引用此方法将要实例化的所有不同类型的可能类型。
但是,当涉及到模板类的虚成员函数时,它似乎有所不同,因为整个类本身是在模板类变量实例化时通过模板参数“创建”的。在这一点上,由于模板的“查找和替换”特性,虚拟方法就像类的任何其他虚拟方法一样。
无论如何,再次说明问题以防它在那里丢失: 临时类中是否允许使用虚拟(纯和/或普通)虚函数?
【问题讨论】:
-
听起来你已经找到了答案……
-
就像我说的,我向自己发誓我之前尝试过但遇到了问题。当它突然起作用时,我想确保它不仅仅是因为我使用不同的编译器、不同的警告/错误标志等,而且它被定义——最好是——按照标准是可以的。
-
另外,就其价值而言,我在网上找不到任何可以明确表示某种方式的东西。还有什么比 SO 更适合放置这些信息的地方?