У меня есть тот шаблонный класс, который использует политику для своего вывода и другой аргумент шаблона, чтобы определить тип для его элементов данных.Кроме того, конструктор берет указатели на базовые классы, которые хранятся в частных указателях.Функции этих объектов должны принимать указатель this на класс шаблона, чтобы предоставить им доступ к данным.В коде это выглядит так:
class ShapeGenerator;
template <typename PointData, typename OutputPolicy> class ModelCreator {
private:
OutputPolicy output;
ShapeGenerator* shape
std::vector<PointData> data;
public:
ModelCreator (ShapeGenerator *s) : shape(s) { }
void createShape() { shape->generateShape(this); }
};
ShapeGenerator является интерфейсом и должен быть реализован.Это выглядит так:
class ShapeGenerator {
public:
void generateShape (ModelCreator* m) = 0;
};
Если я скомпилирую это с помощью g ++ 4.3.4 (cygwin), я получаю ошибку в ShapeGenerator :: generateShape, говорящую 'ModelCreater' is not a type
.Я вставил предварительную декларацию ModelCreator, но она ничего не изменила.Я играл с некоторыми комбинациями типов и параметров, например, передавая только вектор, и затем я получил сообщение об ошибке, в котором говорилось что-то о неполных типах.Я полагаю, в этом проблема.
Итак, возможно ли передать шаблонный тип без особых аргументов?Если да, то как?
edit: Я не связан с именем типа ModelCreator.Если мне нужно написать больше шаблонов, это не проблема.Но я бы не хотел указывать типы ModelCreator в объекте ShapeCreator.Это возможно?
edit2: Хорошо, я думаю, я был немного оптимистичен с этим "дизайном".Было бы неплохо просто добавить немного ингредиентов и получить суп.Но теперь соль должна знать о типе воды в кастрюле.Я изменю шаблоны на простую старую композицию.Спасибо вам, ребята.