gpt4 book ai didi

c++ - 模板方法中的标准容器

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:25:47 24 4
gpt4 key购买 nike

问候。

我不太清楚如何解释自己,但我相信一段代码会让你明白我打算做什么:

template<class A, class B>
void myFunction(A<B>& list)
{
typename A<B>::iterator current = list.begin();
typename A<B>::iterator end = list.end();

while (current != end)
{
current++;
}
}

其中 A 是一个 STL 容器( vector 、列表...)。这就像盗梦空间,但有模板:模板、模板内部等...

问题是:当您的模板的一个参数本身就是一个模板时,您会怎么做...并且仍然希望支持此模板支持的所有类型。

这当然不会编译(它说“A 不是模板”)。

有人知道如何创建这样的模板吗?

最佳答案

您正在寻找模板模板参数

template<template<class T, class All = std::allocator<T> > class A, class B>
void myFunction(A<B>& list)
{
typename A<B>::iterator current = list.begin();
typename A<B>::iterator end = list.end();

while (current != end)
{
current++;
}
}

但是,在您的特定情况下,我认为您最好只传递实例化容器,即

template<class C>
void myFunction(C& list)
{
...
}

像这样使用

vector<char> v;
myFunction(v);

您的原始代码必须这样调用:

myFunction<std::vector, char> (v)

这更冗长并且没有特别的好处

关于c++ - 模板方法中的标准容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5135206/

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