У меня есть этот класс шаблона, который использует политику для своего вывода и другой аргумент шаблона для определения типа его элементов данных. Кроме того, конструктор принимает указатели на базовые классы, которые хранятся в закрытых указателях. Функции этих объектов должны принимать указатель 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, но это ничего не изменило. Я играл с некоторыми комбинациями типов и параметров, например, передавая только вектор, а затем получил сообщение об ошибке, в котором говорилось что-то о неполных типах. Я думаю, это проблема здесь.
Итак, можно ли передать шаблонный тип без конкретных аргументов? Если да, то как?
Изменить: я не привязан к имени типа ModelCreator. Если мне нужно написать его более шаблонно, это не проблема. Но я бы не хотел указывать типы ModelCreator в объекте ShapeCreator. Это возможно?
edit2: Хорошо, думаю, я был слишком оптимистичен в отношении этого "дизайна". Было бы неплохо просто добавить ингредиенты и получить суп. Но теперь соль должна знать, какая вода в горшке. Я изменю шаблоны на простую старую композицию. Спасибо вам, ребята.
ModelCreator
нет, это класс-шаблон. Он не может быть параметром вашей функции. - person GManNickG   schedule 09.07.2010