当前位置: 首页 > 知识库问答 >
问题:

指定容器类型的迭代器类型的部分专门化

黎苑博
2023-03-14
template<typename Iterator>
struct AC {

};

template<typename T, typename Alloc>
struct AC<typename std::vector<T, Alloc>::iterator> { //this doesn't work

};

有人能告诉我为什么这行不通吗?以及如何让它发挥作用?

共有1个答案

公良信然
2023-03-14

不能推断嵌套::的剩余类型。的确,你的问题没有道理。考虑这个更简单的反例:

template <typename> struct Foo;
template <> struct Foo<bool> { typedef float type; };
template <> struct Foo<char> { typedef float type; };

template <typename> struct DoesntWork;

template <typename T> struct DoesntWork<typename Foo<T>::type> { };

现在,如果我说doesntwork ,那么t应该是什么?

关键在于,没有理由认为t应该存在,而foo ::type 是您想要匹配的对象,即使有,也没有理由认为它是唯一的。

 类似资料:
  • 如何将此迭代器与泛型类型一起使用?以下是我在“main”函数中尝试的方法: 结果是:<代码>无法从静态上下文引用非静态类项 结果是:<代码>无法从静态上下文引用非静态类项 结果: 编辑: 我调用的是类而不是方法。这项工作: 迭代器it=deq。迭代器(); 我认为,由于iterator()中返回的实例的类型是ListIterator,因此我需要使用该类型声明“it”。

  • 也许我累了,但是我被这个简单的局部特化卡住了,它不起作用,因为指定模板参数: 将替换为,或没有帮助。那么这种专门化是否可能呢?

  • JavaScript中有没有已知的技巧来区分和之间的区别,而不触发迭代? 我正在尝试实现以下类型检查器: 我知道调用会告诉我们这一点,但在无法触发迭代时我需要它。 此外,即使我在TypeScript中给出了示例,我也需要在运行时严格检查它。

  • 我需要添加一个依赖项(来自log4j的测试罐),但我不知道在gradle中将其包含在编译(“..”)配置步骤中的正确语法是什么。 我需要指定分类器和类型,但在编译步骤中我只能指定: group: name: version。 正确的语法是什么? (我用的是gradle 2.7) 谢啦! 更新 我终于找到了路。

  • 我试图为自己的泛型类编写自己的迭代器。我一直在看几个YouTube教程,在网上搜索。 IntelliJ指出的问题是,我不能像我试图的那样在迭代器类中使用getleft和getright,因为非静态方法不能从静态上下文中引用。我一直在研究静态和更多,但无法解决这个问题。我是完全走错了路,还是至少我的方法有点接近? 运行时: 我遇到了一个无休止的循环,打印5。因此,迭代器本身可以工作,但我的方法有一个

  • 问题内容: 我了解故障快速(LinkedList)和故障安全(copyonwrite)迭代器,但是弱一致性仍然是个谜。 文档说它可能反映了基础馆藏的变化,但不能保证。因此,我认为弱一致性不会创建后备集合的副本。(在并发Map中,它可在同一bucketarray上运行)。 我假设线程A创建了一个迭代器并进行了一半,当线程B将一个项目放到数组开头的存储桶中时,线程A的迭代器将看不到该更改。 如果B将该