Доброго времени суток Вам.
Создал базовый класс с методом-фабрикой. От базового класса произвел template потомка. Создал template объекты с помощью метода-фабрики. Все как по теории и все работает. Дальше проблема.
Не могу получить доступ к полям шаблонного потомка объектами созданными с помощью фабрики. В данном конкретном случае не могу получить доступ к элементам 3Д массива через перегруженную операцию ().
Помогите пожалуйста. Бьюсь над проблемой уже неделю. Нашел фабрику и вот опять затык.
Спасибо
#include <stdlib.h>
#include "misc.h"
// 3d array element type for factory
#define ET_UCHAR 2
#define ET_SHORT 4
#define ET_INT 8
#define ET_FLOAT 16
#define ET_DOUBLE 64
// base class for FACTORY
class BaseAr3d
{
public:
virtual void Allocate() = 0;
virtual void Init(int x, int y, int z) = 0;
virtual ~BaseAr3d() {};
static BaseAr3d* factory(int type);
};
template<class T> class array3d : public BaseAr3d
{
private:
int sizex, sizey, sizez;
T ***data;
void Allocate();
public:
array3d(){};
~array3d(){};
// creates allocated x*y*z array
void Init(int x, int y, int z){ sizex=x; sizey=y; sizez=z; Allocate(); };
T operator()(int x, int y, int z){ return(data[x][y][z]); }; // !!! instead of [][][]
};
BaseAr3d* BaseAr3d::factory(int type)
{
if(type == ET_UCHAR) return new array3d<unsigned char>;
if(type == ET_SHORT) return new array3d<short>;
if(type == ET_INT) return new array3d<int>;
if(type == ET_FLOAT) return new array3d<float>;
if(type == ET_DOUBLE) return new array3d<double>;
};