Поэтому я пытаюсь, чтобы один класс шаблона был контейнером (который позже будет работать), набором классов, также сгенерированных из шаблона и сохраненных в векторе.
Абстрактная форма того, что я пытаюсь сделать, выглядела бы так:
template <typename T, size_t numberofapples>
class Apples {
public:
Apples(std::vector<T> appleinfo1, std::vector<T> appleinfo2);
protected:
std::vector<T> apple_stats;
std::vector<T> info1, info2;
};
template <typename T, size_t numberofapples>
Apples<T, numberofapples>::Apples(std::vector<T> appleinfo1, std::vector<T> appleinfo2) : apple_stats(numberofapples, 0){
for (size_t i = 0; i < numberofapples; ++i) {
apple_stats[i] = rand();
}
info1 = appleinfo1;
info2 = appleinfo2;
}
template <typename T, typename FruitType, size_t numberoffruitperbranch>
class Tree {
public:
Tree(size_t numberofbranches, std::vector<T> commonfruitinfo1, std::vector<T> commonfruitinfo2);
protected:
std::vector<FruitType<T, numberoffruitperbranch> > branchset;
};
template <typename T, typename FruitType, size_t numberoffruitperbranch>
Tree<T, FruitType, numberoffruitperbranch>::Tree(size_t numberofbranches, std::vector<T> commonfruitinfo1, std::vector<T> commonfruitinfo2) : {
typename FruitType<T, numberoffruitperbranch> single_fruit(fruitinfo1, fruitinfo2);
branchset.resize(numberofbranches, single_fruit);
//in the un-abstracted version that has nothing to do with fruit, I'd then iterate over the vector and run some internal code on each one
}
Цель состоит в том, чтобы я хотел иметь возможность сделать что-то вроде:
Tree<double, Apples, 10> MyFirstTree(5, vectorofdata, secondvectorofdata);
Однако на данный момент компилятор сообщает мне, что FruitType не является допустимым шаблоном внутри функции конструктора.На самом деле, все внутри конструктора, кажется, выходит за рамки и помечается, но я не могу понять, почему.У неабстрагированной версии также есть ряд других переменных и функций-членов, но проблема определенно заключается в конструкторе контейнера внешнего класса.
Где я ошибаюсь / как это можно сделать лучше?
edit: исправлены некоторые ошибки компилятора (я думаю), которые, как я заметил, отличались от этого тривиального примера, который я не делал вфактическое применение