c++ - 使用 Typedef 指定模板参数

标签 c++ templates iterator c++11

我希望能够将两个连接的迭代器作为一个传递,以利用一些类似 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

任何帮助将不胜感激。

谢谢

最佳答案

value_typeIT1 的依赖类型,因此您必须在那里指定 typename

typename IT1::value_type

关于c++ - 使用 Typedef 指定模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7679613/

相关文章:

c++ - 使用数据类型(类类型)作为映射中的键

node.js - 嵌套 EJS 模板循环

c++ - 嵌套结构化绑定(bind)可能吗?

c++ - 如何在不同文件中使用嵌套命名空间?

c++ - fork 子进程和 C++ 对象

arrays - 确定模板参数是否是持有相同非限定类型的数组

c++ - 遍历成对的 vector 并访问第一个和第二个元素

javascript - 各种迭代器性能差异的原因

java - ArrayList::iterator 中的 i >= elementData.length 是多余的吗?

c++ - 应该返回 0;在 main() 中避免?