如何在STL算法上接收字符串的迭代器

McK*_*McK 2 c++ iterator stl

我需要开发一个接收"字符串列表"的库的算法.

当然我想传递一个"抽象"迭代器来将该列表的内部表示(向量,链表,映射......)与我的函数访问它分离.

这是我的方法:

template <typename ForwardIterator>
void myAlgorithm(ForwardIterator itBegin, ForwardIterator itEnd) {
   for(; itBegin != itEnd ; ++itBegin) {
       // Do something with *itBegin
   }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何将容器的类型限制为字符串?或者甚至更多,是否有某种方式接受std :: strings和char*作为元素?

非常感谢.

ild*_*arn 5

使用静态断言以及std::iterator_traits<>:

template<typename ForwardIterator>
void myAlgorithm(ForwardIterator itBegin, ForwardIterator itEnd) {
    typedef typename std::iterator_traits<ForwardIterator>::value_type value_t;
    BOOST_STATIC_ASSERT((
        boost::is_same<value_t, std::string>::value ||
        boost::is_same<value_t, char const*>::value
    ));

    for(; itBegin != itEnd ; ++itBegin) {
        // Do something with *itBegin
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你使用的是C++ 0x中的编译器,你可以使用static_assert,而不是BOOST_STATIC_ASSERTstd::is_same代替boost::is_same.