Имеется иерархия классов для набора данных Data, Data1 ... DataN. Требуется создать набор различных обработчиков этих данных.
Пробую создать иерархию декораторов ActorDecorator ... ActorDecoratorM, так чтобы потом использовать как-то так ActorDecorator23<Data125>.
Возможно ли унаследоваться от параметра шаблона ?
template<class T> struct Data {
T x;
virtual void write(){ cout << "Data = " << x << endl; };
};
template<class T> struct Data1 : public Data<T> {
T y;
virtual void write() final { Data<T>::write(); cout << "add Data 1" << y << endl;}
};
template<class D, class T> struct ActorDecorator: public D<T> {
T res;
virtual void do(){ res = static_cast<D<T>*>(this)->x; cout << res*res << endl; }
};
main(){
ActorDecorator<Data1,float> s;
}
// error: expected template-name before ‘<’ token
// template<class D, class T> struct ActorDecorator: public D<T> {
// ^