gpt4 book ai didi

C++ 模板 - 指定容器类型及其包含的容器元素类型

转载 作者:行者123 更新时间:2023-11-30 01:31:13 29 4
gpt4 key购买 nike

我希望能够创建一个函数,在该函数中我指定一个参数以同时具有模板化容器和该容器的模板化元素类型。这可能吗?我收到“错误 C2988:无法识别的模板声明/定义”等等。这是有问题的功能。

template<class Iter, class Elem>
void readIntoP(Iter<Elem> aCont){
ifstream ifss("data.dat");
string aString;
int counter = 0;
item tempItem;
while(ifss >> aString){
istringstream iss(aString);
if(counter == 0){
tempItem.name = aString;
}else if(counter == 1){
int aNum = 0;
iss >> aNum;
tempItem.iid = aNum;
}else{
double aNum = 0;
iss >> aNum;
tempItem.value = aNum;
aCont.push_back(tempItem);
counter = -1;
}
++counter;
}
}

最佳答案

您需要使用模板模板参数,例如,

template <template <class> class Iter, class Elem>
void readIntoP(Iter<Elem> aCont) { /* ... */ }

但是请注意,标准库容器采用多个模板参数(例如,vector 采用两个:一个用于要存储的值类型,一个用于分配器使用)。

您可以改为对实例化的容器类型使用单个模板参数,然后使用其 value_type typedef:

template <typename ContainerT>
void readIntoP(ContainerT aCont)
{
typedef typename ContainerT::value_type ElementT;
// use ContainerT and ElementT
}

关于C++ 模板 - 指定容器类型及其包含的容器元素类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3454373/

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