gpt4 book ai didi

c++ - 带有迭代器的模板类到 STL 容器

转载 作者:行者123 更新时间:2023-11-28 04:31:39 25 4
gpt4 key购买 nike

我想创建一个模板类,它有一个 STL 容器的迭代器作为成员。这就是我得到的结果:

#include <iostream>
#include <vector>

using namespace std;

template<typename Element, template <class> class StdLibContainer>
struct ClassHoldingAnIteratorToAStandardContainer
{
ClassHoldingAnIteratorToAStandardContainer(){}
typename StdLibContainer<Element*>::iterator std_lib_iterator;
};


int main()
{
vector<int> vec{1,2,3};
ClassHoldingAnIteratorToAStandardContainer<int,vector<int>> holding_iterator_to_vec;
//DOES NOT WORK, compiler says: expected a class template, got ‘std::vector<int>’
return 0;
}
  1. 你能解释一下 template <typename> class StdLibContainer 的语法吗? ?我在 stackoverflow 的某个地方找到了它。但是我不明白。

  2. 如何创建 ClassHoldingAnIteratorToAStandardContainer 的实例? ?到目前为止,我所有的尝试都失败了。编译器总是给出错误信息:`expected a class template, got ‘std::vector’

在上面的例子中我想分配 holding_iterator_to_vec vec.begin() .

最佳答案

template <typename> classtemplate <class> class相同.最初,在引入模板时,它们允许两种等效形式:

template<class T> struct Foo {};
// or
template<typename T> struct Foo {};

不要问我为什么!然而,模板模板参数却不是这样:

template <template <class> typename T> struct Foo {};

是唯一允许的语法。显然,人们对此不满意,所以语法放宽了。

关于你的第二个问题,std::vector采用至少两个模板参数,数据类型和分配器。这就是为什么单参数模板在 C++17 之前没有削减它。在 C++17 之后,它会起作用。

要使其通用,请使用

template<template <class...> class Container> struct Foo{};

关于c++ - 带有迭代器的模板类到 STL 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52746560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com