【发布时间】:2011-10-06 19:41:36
【问题描述】:
我希望能够将两个连接的迭代器作为一个传递,以利用一些类似 stl 的算法(例如 TBB),所以我正在制作一个连接它们的自定义迭代器,但遇到了一些绊脚石。
我需要专门化迭代器,但它不会让我通用地指定模板参数。
像这样:
template<typename IT1, typename IT2>
struct multi_iter : public std::iterator<
std::output_iterator_tag,
std::pair<IT1::value_type&, IT2::value_type&> >
{
.
:
但是它会让我这样做,但这不是我所追求的
template<typename IT1, typename IT2>
struct multi_iter : public std::iterator<
std::output_iterator_tag,
std::pair<int&, int&> >
{
.
:
我收到此错误
multi_iter.cpp:12:53: error: template argument 2 is invalid
multi_iter.cpp:12:55: error: template argument 2 is invalid
multi_iter.cpp:12:55: error: template argument 4 is invalid
multi_iter.cpp:12:55: error: template argument 5 is invalid
.
:
我确实有 std::pair
任何帮助将不胜感激。
谢谢
【问题讨论】:
-
你没有专攻
std::iterator。您必须从头开始编写整个迭代器类。 -
请详细说明:我应该指出,当我指定整数时,这确实像它应该的那样工作
-
@KerrekSB,实际上,您可以专门化
std::iterator以获得一些方便的 typedef:cplusplus.com/reference/std/iterator/iterator。你必须提供所有的功能实现。 -
KerrekSB:上面的代码示例被删减以保持相关性,我已经实现了 output_iterator 所需的所有功能
标签: c++ templates iterator c++11