c++ - 如何在参数参数的嵌套模板中引用类型?

标签 c++ templates types

假设我有以下定义

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倾向于使用第一种方法。

关于c++ - 如何在参数参数的嵌套模板中引用类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5508746/

相关文章:

c++ - 如何使用WIN32内核和VC++将位图图像拉伸(stretch)到某些特定的坐标?

c++ - 使用可变参数模板的显式模板实例化

c++ - 使用可变参数模板类型描述函数参数

c++ - 限定依赖类型的 typedef

class - 如何使用 OCaml 中的类类型强制类中的 val 在类中不可变

types - 用户定义的类型防护不适用于 `any` 类型?

c++ - 如何在现代 C++ 中将不同类类型的对象存储到一个容器中?

c++ - TrackPopupMenu : Window disabled after menu dissapears

c++ - 在 C++ 中通过引用传递时 *val 和 &val 有何不同

c++ - 模板类的非侵入式序列化方法