Eh, ma se usi un typedef non ci scappi tanto, perche' per creare un oggetto sullo heap hai un numero limitato di scelte
1 - Usi la new direttamente
Questo vuol dire che devi chiamare la new con l'oggetto concreto, non un puntatore. Perfare questo usi la classe originale, un ulteriore typedef, o qualche funzione che ti ritorni la classe partendo dal puntatore
Codice:
using Line = Node<Point>*;
using LineImpl = Node<Point>;
Line l = new LineImpl( ... );
Codice:
using Line = Node<Point>*;
template<typename T>
struct class_of
{
typedef T type;
};
template<typename T>
struct class_of<T*>
{
typedef typename class_of<T>::type type;
};
Line l = new class_of<Line>::type( ... );
Secondo me queste alternative servono solo a fare confusione.
2 - Usi una funzione
E' l'esempio che ho fatto io
3 - Implementi Line come una classe wrapper, e allora li' puoi utilizzre qualsiasi metodo che vuoi, new, o factory.
Questo perche' quando hai un tipo che e' un semplice puntatore, puoi solo applicarci funzioni. In ogni caso l'approccio (definire la line come typedef) ha il suo senso in C, molto meno in C++
Prego !
