Ich habe eine Template-Klasse myClass<T>
, wobei T ein Skalar sein kann (float, int, double, etc.) Ich möchte ein vtkFloatArray
schaffen, vtkIntArray
oder vtkDoubleArray
, je nach der Typ T.Nicht virtuelle Version von vtkDataArrayTemplate
Ich dachte, dass vtkDataArrayTemplate<T>
wäre eine gute Lösung. Leider ist es eine virtuelle Klasse, so kann ich nicht schreiben:
vtkSmartPointer< vtkDataArrayTemplate<T> > array = vtkSmartPointer<vtkDataArrayTemplate<T> >::New();
, weil, wenn ich versuche, eine myClass zu instanziiert, ich den Fehler:
error: invalid conversion from ‘vtkObject*’ to ‘vtkDataArrayTemplate<float>*’ [-fpermissive]`
Ich denke, es liegt daran, vtkDataArrayTemplate::New()
existiert nicht (weil die Klasse virtuell ist), stattdessen wird vtkObject::New()
aufgerufen. Dann verstehen wir, dass es nicht eine vtkObject
in eine vtkDataArrayTemplate
verwandeln kann.
Also meine Frage ist:
Gibt es eine nicht-virtuelle Version von vtkDataArrayTemplate
, die mir vtkFloatArray
zu schaffen erlauben würde, wenn T float
ist, vtkDoubleArray
wenn T double
ist, usw.?
PS: Ich benutze VTK 6.0.0
vtk-users sagte mir, dass diese Karte zwischen VTK-Typ und Aufruf der rechten Funktion existiert, und es ist in 'vtkDataArray :: CreateDataArray (int dataType)'. – matthieu