Если класс проистекает из вектора, как вы можете преформировать (templated) векторные функции на нем?apply std :: vector <T> функции для класса, полученного из std :: vector
Например, следующий код не будет компилироваться:
#include <iostream>
#include <vector>
using namespace std;
class Batch:public vector<int>{};
template<class T>
vector<vector<T> > interleave(vector<T> v, unsigned l){
vector<vector<T> > r(l);
int i=0;
for(const &t:v) r[(i++)%l].push_back(t);
return r;
}
template<class T>
vector<T> flatten(vector< vector<T> > w){
vector<T> r;
for(const vector<T> &v:w)
r.insert(r.end(),v.begin(),v.end());
return r;
}
int main(){
Batch a = {0,1,2,3,4,5,6,7,8,9,10,11};
vector<Batch> b = interleave(a,3);
Batch c = flatten(b);
for(auto d:c) cout<<d<<' ';
cout<<endl;
}
Но это будет компилировать, если class Batch:public vector<int>{};
изменяется на typedef vector<int> Batch;
для получения желаемого выхода: 0 3 6 9 1 4 7 10 2 5 8 11
Публичное наследство от вектора - плохая идея. – chris
Рассмотрите возможность достижения того, что вы хотите [композиция вместо наследования] (http://en.wikipedia.org/wiki/Composition_over_inheritance). У вас будет много головных болей, пытающихся просто передать данные на вашу векторную базу. –
@SamCristall Я пробовал композицию. Это делает код уродливым, так как мне нужно сделать много особых случаев для шаблонных функций. –