编辑:这只是另一个案例“愚蠢而无趣的错误”。你已经被警告了:)
这是让我彻夜难眠的事情。也许具有较高 C++ 知识的人可以找到如何使其工作:
template<class T>
class Base
{
virtual void Method ( T* arg ) = 0;
};
class Child : public Base<MyType>
{
void Method ( MyType* arg ) { /*blah*/ };
};
这不会编译(至少在 VS2008 上不会),因为它无法将两个方法匹配在一起。
目前我们通过在 Method 声明中使用 BaseType 而不是 MyType 来解决它,然后在 Method 的 Child 实现中将 BaseType 转换为 MyType(我们仍然需要 MyType 作为基类中其他内容的模板)。
仍然能够直接使用模板化类型会很好。
编辑:谢谢大家,似乎修复其他错误(后面列出的)使它一切正常。我确实有template<class T>
,而不是template<T>
在我的原始代码以及列为公共的方法。这表明我应该在发布之前等待更长的时间。我为此道歉。