有一次,我肯定你不能这样做,但前几天我正在玩一些代码,它似乎编译和工作。我只是想确认我不幸运。模板类可以有一个纯虚函数 - 我猜这也意味着纯粹的虚方法对于析构函数也是有效的?模板类中是否允许纯虚拟方法?
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;
}
而且这是由于管理虚拟表的可能性来引用所有不同类型的可能类型,所以这种方法将被实例化。
但是,当它涉及模板类的虚拟成员函数时,它似乎是不同的,因为当模板类变量被实例化时,整个类本身是通过模板参数“创建”的。在这一点上,由于模板的“查找和替换”性质,虚拟方法就像任何其他类型的虚拟方法一样。
无论如何,如果它在那里迷路了,再次提出这个问题: 在临时类中是否允许虚拟(纯的和/或正常的)虚拟函数?
这听起来像你已经想通了这个问题的答案... – 2012-01-19 00:36:15
就像我说的,我对自己发誓,我尝试过并有问题。当它突然开始工作时,我想确保它不仅仅是因为我处于不同的编译器,不同的警告/错误标志等,并且它被定义 - 最好 - 标准是可以的。 – Anthony 2012-01-19 00:40:37
此外,对于它的价值,我无法在网上找到任何明确表示这种或那种方式的内容。比SO更好的地方放置这些信息? – Anthony 2012-01-19 00:41:32