我正在将一个项目从C#移植到C ++,并且在使用模板时遇到问题,我需要同时拥有一个非模板化版本和一个模板化版本,其中一个属于另一个类,即:
class DataBuffer // Holds generic databuffer functions (getting size in bytes etc)
{
public:
int32 getVal() { return 10; }
};
template <typename T>
class DataBuffer<T> : public DataBuffer // Able to retrieve data as a type...
{
public:
int32 getSizeOfT() { return sizeof(T); }
};
我有接受任何类型的DataBuffer作为参数的方法,因此无法模板化整个类,有没有办法在不重命名基类的情况下这样做?
非常感谢任何帮助。
编辑: 此代码无法编译,并在编译时抛出以下错误:
error C2989: 'DataBuffer' : class template has already been declared as a non-class template
答案 0 :(得分:2)
不幸的是,没有办法这样做。我认为标准的相关部分是:
类模板不得与任何其他模板同名, 类,函数,对象,枚举,枚举器,命名空间或类型 在(14.5.4)中规定的相同范围(3.3)。除了那个 函数模板可以通过(非模板)重载 具有相同名称的函数或其他函数模板 相同名称(14.8.3),在命名空间范围内或在中声明的模板名称 类范围在该范围内应是唯一的。
但是,应该接受每种类型的DataBuffer
的方法也可以成为模板,因此从公共基础继承将变得不必要。
答案 1 :(得分:0)
您需要为类和类模板指定不同的名称或将它们放入不同的名称空间:类和类模板不能具有完全相同的名称。