我正在构建一个具有类标准接口的数据结构类,并为数据结构实现不同的迭代器。
从概念上讲,我想做的是这样的:
template <class DataT>
class DataStructure
{
protected:
DataT& Data;
public:
DataStructure(DataT& data) : Data(data) {}
class BaseIterator
{
public:
BaseIterator()
{
cout<<"BaseIterator"<<endl;
}
};
class DerrivedIterator1 : public BaseIterator
{
public:
DerrivedIterator1()
{
cout<<"DerrivedIterator1"<<endl;
}
};
class DerrivedIterator2 : public BaseIterator
{
public:
DerrivedIterator2()
{
cout<<"DerrivedIterator2"<<endl;
}
};
template<class IterT>
IterT Begin()
{
//none-specialized implementation. Possibly throw exception
}
template<>
DerrivedIterator1 Begin<DerrivedIterator1>()
{
//Find beginning for DerrivedIterator1
}
template<>
DerrivedIterator2 Begin<DerrivedIterator2>()
{
//Find beginning for DerrivedIterator1
}
};
但这当然不能编译,因为 C++ 不允许在非专用模板容器中专门化模板成员函数。
显而易见的解决方法当然是声明 2 个不同的函数:Begin_Iterator1 和 Begin_Iterator2 并完成它。但我正在寻找一种不会改变界面的解决方法。
有任何想法吗?
编辑:我忘了提到这是针对硬件分配的,因此 boost 甚至 std 都不是一个选项。