gpt4 book ai didi

c++ - 接收迭代器作为参数并知道类

转载 作者:太空宇宙 更新时间:2023-11-04 15:59:23 25 4
gpt4 key购买 nike

我需要创建一个方法来接收迭代器作为参数并返回相同类型的模板化集合。

我创建了一个最小示例来演示我的需求:

#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
}

这不是一个可行的示例,但我正在寻找一种方法来实现它。

重要的部分是方法 及其参数,它将返回一个带有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>

关于c++ - 接收迭代器作为参数并知道类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48193455/

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