通过传递输出迭代器从函数填充std :: [容器]

时间:2010-12-27 09:00:26

标签: c++ templates iterator

我想通过传递输出迭代器从函数内部填充容器,因为这是我理解的最有效的方法。 e.g。

template <typename OutputIterator>
void getInts(OutputIterator it)
{
   for (int i = 0; i < 5; ++i)
     *it++ = i;
}

Is returning a std::list costly?

但是我如何强制执行类型,迭代器应该指向?基本上我想说“这个函数采用boost :: tuple类型的输出迭代器”。

2 个答案:

答案 0 :(得分:5)

您可以将boost::enable_ifstd:iterator_traits结合使用:

#include <boost/type_traits/is_same.hpp>
#include <boost/utility/enable_if.hpp>

template <typename OutputIterator>
typename boost::enable_if<
    boost::is_same<
        int, /* replace by your type here */
        typename std::iterator_traits<OutputIterator>::value_type
    >
>::type getInts(OutputIterator it)
{
   for (int i = 0; i < 5; ++i)
     *it++ = i;
}

答案 1 :(得分:2)

你不需要。如果调用者传递了错误的迭代器类型,代码将无法编译

所以它已经为你强制执行了。