我有一个容器类(称为Atom),我想存储Term类型的对象。许多STL容器构造函数具有Container(Iterator first, Iterator last)
形式,用一组元素初始化容器。
现在,我希望能够将此表单用于我的Atom类,但我不确定如何从容器类中解开迭代器。例如,目前我有:
class Atom {
public:
Atom(std::string str,
std::vector<Term>::const_iterator start,
std::vector<Term>::const_iterator end);
这只允许矢量迭代器。我如何概括我采用的迭代器类型?
答案 0 :(得分:8)
每当您需要对类型进行概括时,请考虑模板:
class Atom {
public:
template <typename ForwardIterator>
Atom(std::string str,
ForwardIterator start,
ForwardIterator end);
现在只需迭代范围,无论它是什么。
答案 1 :(得分:1)
您可以将构造函数声明为自己的模板。只需将start
和end
视为迭代器,如果它们支持该接口,它们将起作用。不要担心强制迭代器处理类型Term
。如果复制构造函数可以将其转换为Term
,那么它将起作用。
构造函数可能如下所示:
template<typename I> Atom(std::string str, I start, I end);