假设我有以下定义
template <class T>
class Sequence
{
}
例如
Sequence<string>
可能是字符串数组,类似于vector<string>
// Now define iterator template
template <class T>
class SequenceIterator
{
}
当然,这里的想法是能够在某些序列上创建迭代器
例如。
SequenceIterator< Sequence<string> > iter1;
SequenceIterator< Sequence<int> > iter2;
我现在要问的问题是如何定义SequenceIterator内部将存在的成员函数,其目的是返回序列中的下一个值。通常,我希望将其写为
bool Next(T1 & value); // If the iterator has not finished, set value to the next item
但是,
SequenceIterator
已经以模板名称传递,即Sequence<string>
或Sequence<int>
所以问题是,如何通用地引用该基础类型(
string
或int
),以便可以定义Next成员函数。谢谢,
大卫
最佳答案
共有三种方法:将Sequence
的定义更改为包括
typedef T type;
或者,更改
SequenceIterator
的模板参数以明确识别Sequence
本身就是模板template< template < class > class Seq, class T >
class SequenceIterator< Seq< T > >
尽管
SequenceIterator
的实例化没有改变,但是您现在可以直接访问T
。第三,您可以使用container traits class为您处理类型推导。第三个选项提供了Sequence
和SequenceIterator
之间的最小耦合,但是,像Mark said一样,standard containers倾向于使用第一种方法。