假设我有以下定义

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>
所以问题是,如何通用地引用该基础类型(stringint),以便可以定义Next成员函数。

谢谢,
大卫

最佳答案

共有三种方法:将Sequence的定义更改为包括

typedef T type;

或者,更改SequenceIterator的模板参数以明确识别Sequence本身就是模板
template< template < class > class Seq, class T >
class SequenceIterator< Seq< T > >

尽管SequenceIterator的实例化没有改变,但是您现在可以直接访问T。第三,您可以使用container traits class为您处理类型推导。第三个选项提供了SequenceSequenceIterator之间的最小耦合,但是,像Mark said一样,standard containers倾向于使用第一种方法。

09-29 23:49