我需要为接收“字符串列表”的库开发一种算法。
当然,我想传递一个“抽象”迭代器来将该列表( vector 、链表、映射...)的内部表示与从我的函数访问它的方式分离。
这是我的方法:
template <typename ForwardIterator>
void myAlgorithm(ForwardIterator itBegin, ForwardIterator itEnd) {
for(; itBegin != itEnd ; ++itBegin) {
// Do something with *itBegin
}
}
我的问题是,如何限制容器的类型为字符串?甚至更多,是否有某种方法可以同时接受 std::strings 和 char* 作为元素?
非常感谢。
最佳答案
将静态断言与 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
}
}
如果您使用的是 C++0x 编译器,则可以使用 static_assert
而不是 BOOST_STATIC_ASSERT
和 std::is_same
而不是 boost::is_same
.
关于c++ - 如何在 STL 算法上接收字符串迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6392740/