接收迭代器作为参数并知道类
Receive iterators as arguments and know class
我需要创建一个方法,该方法接收迭代器作为参数并返回相同类型的模板化集合。
我创建了一个最小的例子来证明我的需求:
#include <list>
#include <iostream>
using namespace std;
class A {
int i;
public:
A(int _i) : i(_i) {}
operator int() {
return i;
}
};
class B {
int i;
public:
B(int _i) : i(_i) {}
operator int() {
return i;
}
};
template <class T>
list<T> method(typename list<T>::iterator begin, typename list<T>::iterator end) {
list<T> res; // I need the template class here
for (; begin != end; begin++) {
cout << *begin; // Whatever...
}
return res;
}
int main() {
list<A> listA = {1, 2, 3};
list<B> listB = {4, 5, 6};
auto res1 = method(listA.begin(), listA.end()); // Cannot change
auto res2 = method(listB.begin(), listB.end()); // Cannot change
}
这不是一个工作示例,但我正在寻找一种方法来使其工作。
重要的部分是method
及其参数,它将返回一个带有T
的模板化类。所以我可以随心所欲地更改方法,但auto res1 = method(listA.begin(), listA.end());
应该保持不变。(不是我的代码(
我怎么能做这样的事情?
在这种特殊情况下(如果你知道它是std::list
(,你可以从迭代器本身获得value_type
:
template <class T>
auto method(T begin, T end) {
list<typename T::value_type> res; // I need the template class here
for (; begin != end; begin++) {
cout << *begin; // Whatever...
}
return res;
}
value_type = U
仅适用于std::list<U>
typename list<T>::iterator
是一个非推导的上下文。需要传递容器本身或将其指定为显式模板参数。
迭代器指定一个序列;它们不必与"集合"相关联。例如,您可以创建一个从控制台读取输入的迭代器。
如果要将函数限制为仅使用容器,请按此编写:
template <class T>
T f(const T& container) {
// whatever; code that uses begin() and end()?
}
这是不可能的。可以拥有不对应于任何容器的迭代器。 调用方法的函数应创建一个空列表,并将back_inserter传递给该列表作为方法的第三个参数。使用 std:copy 作为您的方法应该是什么样子的示例。
相关文章:
- 如何在C++中将迭代器作为函数参数传递
- 定义模板参数的迭代器类型
- 当通知迭代器参数初始化为空列表的开头时,list::insert 行为是什么?
- 具有C++迭代器参数的多功能函数
- C++如何获取传递给函数(STL 迭代器)的参数的名称
- 当迭代器(输入参数)通常不是constexpr时,constexpr算法真的有用吗
- 迭代器的模板参数:函数在调用时推断类型?
- 接受迭代器作为参数并存储值的类?
- 我的代码在作为参数传入 .begin() 时不起作用,但在我将 .begin() 转换为迭代器后工作
- 如何使用迭代器作为参数方法?
- 调用模板函数的问题"No matching function for call"参数:迭代器、对象函数
- 使用 std::vector<Particle> 粒子;函数 .at() 不能与迭代器一起使用,它作为 for 循环中的参数
- 如何确保函数模板的参数是随机访问迭代器
- 使用迭代器和可变参数模板的笛卡尔乘积
- 从具有迭代器参数的模板函数返回指针
- 接收迭代器作为参数并知道类
- 如何断言模板参数的类型 STL 迭代器类型
- 声明一个模板函数,该函数接收两个泛型迭代器作为参数
- 如何将迭代器用作模板参数并返回其值
- C 功能具有参考参数错误的迭代器错误.寻求解释