假设我有以下定义
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倾向于使用第一种方法。
关于c++ - 如何在参数参数的嵌套模板中引用类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5508746/