std::vector
类有一个方便的构造函数,它允许任何输入迭代器作为其参数。我想在我自己的类中实现一个类似的模式,因为类在实例化时需要接受一些集合,但是我想在集合上使用迭代器来进行封装。我想到的一种方法是使用输入迭代器类型对整个类进行模板化,但这不能是STL所做的,因为vector
显然只是模拟迭代的类型。当然,一个选项是模板生成器函数,但我真的想知道它是如何通过实现STL的编译器完成的 - 不知何故,InputIterator
类型只是一个特定于构造函数的类型名,即使构造函数可以不定型。
(是的,我试过看vector.tpp
,但我无法理解)。
答案 0 :(得分:5)
你的类应该有一个模板化的构造函数(在迭代器类型上模板化):
class my_class {
template <typename InputIterator>
my_class(InputIterator first, InputIterator last) {
// ...
}
// ...
};