使用 Typedef 指定模板参数
我希望能够将两个连接的迭代器作为一个传递,以利用一些类似 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
任何帮助将不胜感激。
谢谢
I want to able to pass two joined iterators as one to take advantage of some stl like algorithms (such as TBB) so I am making a custom iterator that joins them but am hitting some stumbling blocks.
I need to specialize iterator, however it won't let me generically specify a template parameter.
Like so:
template<typename IT1, typename IT2>
struct multi_iter : public std::iterator<
std::output_iterator_tag,
std::pair<IT1::value_type&, IT2::value_type&> >
{
.
:
However it will let me do this, but this is not what I am after
template<typename IT1, typename IT2>
struct multi_iter : public std::iterator<
std::output_iterator_tag,
std::pair<int&, int&> >
{
.
:
I get this error
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
.
:
I do have the std::pair
Any help would be greatly appreciated.
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
value_type
是IT1
的依赖类型,因此您必须在那里指定typename
value_type
is a dependent type onIT1
, so you have to specifytypename
there你试过这个吗?
Have you tried this?
IT1::value_type
依赖于类型参数并且是一种类型,因此需要通过typename
关键字指定:顺便说一句,如果您想“压缩”两个迭代器(即迭代两个序列{1, 2}和{"a", "b"},如(1, "a"), then (2, "b")),看一下zip_iterator 来自 boost.iterators 库。
IT1::value_type
is dependent on a type parameter and is a type, so it needs to be designated bytypename
keyword:BTW if you want to "zip" two iterators (that is, iterate two sequences {1, 2} and {"a", "b"}, as (1, "a"), then (2, "b")), have a look at the zip_iterator from the boost.iterators library.