【发布时间】:2013-04-16 18:23:30
【问题描述】:
我需要创建一些特定的构造函数来获取两个迭代器:开始迭代器和结束迭代器。
我有一些代码及其工作原理:
#include <iostream>
#include <vector>
using namespace std;
template<typename T>
class A
{
public:
T a[10];
typename std::vector<T>::iterator itStart, itEnd;
A(typename vector<T>::iterator itStart, typename vector<T>::iterator itEnd):itStart(itStart),itEnd(itEnd){}
void see()
{
int i=0;
while(itStart != itEnd)
{
cout<<*itStart<<endl;
a[i] = *itStart;
itStart++;
i++;
}
}
};
template <typename Iterator>
double Sum( Iterator begin, Iterator end );
int main()
{
cout << "Hello world!" << endl;
vector<int> v;
v.push_back(1);
v.push_back(1);
v.push_back(2);
v.push_back(3);
class A<int> a(v.begin(),v.end());
a.see();
return 0;
}
但我想让构造函数参数适用于所有 STL 容器(如 Set、List、Map 等)和普通数组(普通指针)。 那么我可以用通用模板的方式制作它吗?类似的东西:
template<typename T>
class A
{
public:
iterator<T> itStart, itEnd;
A(iterator<T> itStart, iterator<T> itEnd):itStart(itStart),itEnd(itEnd){}
void see()
{
while(itStart != itEnd)
{
cout<<*itStart<<endl;
itStart++;
}
}
};
我知道上面的代码是错误的,但我想解释一下我的想法。
当然我可以重载构造函数,但我懒得这么做。 STL 容器太多。 有一些模板方法可以解决这个问题吗?
【问题讨论】:
-
我问的是另一种方法。解决不了我的懒惰。
-
您希望
A的成员itStart和itEnd不具体 - 对吗? -
类似的东西,它们会被检测到(类型集,地图等)。当构造函数调用时
-
如果你确实重载了构造函数,你会怎么做?您会为 itStart 和 itEnd 使用什么类型?
-
您可能会发现这很有用:stackoverflow.com/q/9938/951890