<div dir="ltr"><div><div>Thank you both for your answers, it was really helpful.<br>Here is how I ended up writing it :<br><br>int GetVTKType(std::size_t hash_code)<br>{<br>    static std::map<std::size_t, long> typeMap;<br>    if(typeMap.empty())<br>    {<br>        typeMap[typeid(void).hash_code()]               = VTK_VOID;<br>        typeMap[typeid(char).hash_code()]               = VTK_CHAR;<br>        typeMap[typeid(signed char).hash_code()]        = VTK_SIGNED_CHAR;<br>        typeMap[typeid(unsigned char).hash_code()]      = VTK_UNSIGNED_CHAR;<br>        typeMap[typeid(short).hash_code()]              = VTK_SHORT;<br>        typeMap[typeid(unsigned short).hash_code()]     = VTK_UNSIGNED_SHORT;<br>        typeMap[typeid(int).hash_code()]                = VTK_INT;<br>        typeMap[typeid(unsigned int).hash_code()]       = VTK_UNSIGNED_INT;<br>        typeMap[typeid(long).hash_code()]               = VTK_LONG;<br>        typeMap[typeid(unsigned long).hash_code()]      = VTK_UNSIGNED_LONG;<br>        typeMap[typeid(float).hash_code()]              = VTK_FLOAT;<br>        typeMap[typeid(double).hash_code()]             = VTK_DOUBLE;<br>        typeMap[typeid(std::string).hash_code()]        = VTK_STRING;<br>        typeMap[typeid(long long).hash_code()]          = VTK_LONG_LONG;<br>        typeMap[typeid(unsigned long long).hash_code()] = VTK_UNSIGNED_LONG_LONG;<br>        typeMap[typeid(int64_t).hash_code()]            = VTK___INT64;<br>        typeMap[typeid(uint64_t).hash_code()]           = VTK_UNSIGNED___INT64;<br>    }<br>    return typeMap[hash_code];<br>}<br><br></div><div>vtkDataArray * array = vtkDataArray::CreateDataArray(GetVTKType(typeid(T).hash_code()));<br><br><br></div><div>Thanks again !<br></div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr">Matthieu Heitz<br></div></div></div></div></div></div></div>
<br><div class="gmail_quote">2016-04-07 15:50 GMT+02:00 Shawn Waldon <span dir="ltr"><<a href="mailto:shawn.waldon@kitware.com" target="_blank">shawn.waldon@kitware.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div>Matthieu,<br><br></div>If you have the VTK type code (VTK_INT, VTK_FLOAT, etc) there is a function vtkDataArray::CreateDataArray(int type) that takes this type code.  You'll still have to do the first part of the code Cory gave, but the switch statement is already implemented in VTK.  I don't know if there is anything that takes the template parameter and gives the type code though.<br><br></div><div>HTH,<br></div>Shawn<br></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Apr 7, 2016 at 9:35 AM, Cory Quammen <span dir="ltr"><<a href="mailto:cory.quammen@kitware.com" target="_blank">cory.quammen@kitware.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi Matthieu,<div><br></div><div>I'm not sure if there is a templated array factory in VTK to do this.<br><div><br></div><div>You could make specialized templated utility functions specialized for each of your types, e.g. (not tested):</div><div><br></div><div>template <typename T></div><div>int GetVTKType(T *)</div><div>{</div><div>  return 0;</div><div>}</div><div><br></div><div>template <></div><div>int GetVTKType(int *)</div><div>{</div><div>  return VTK_INT;</div><div>}</div><div><br></div><div>template <></div><div>int GetVTKType(float* )</div><div>{</div><div>  return VTK_FLOAT;</div><div>}</div><div><br></div><div>and so on, then use this to create the right type of array in a switch statement:</div><div><br></div><div>int arrayType = GetVTKType();</div><div>switch (arrayType)</div><div>{</div><div>  case VTK_INT:</div><div>    return vtkIntArray::New();</div><div>    break;</div><div><br></div><div>  case VTK_FLOAT:</div><div>    return vtkFloatArray::New();</div><div>    break;</div><div><br></div><div>  default:</div><div>    //...</div><div>}</div></div><div><br></div><div>HTH,</div><div>Cory</div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div>On Thu, Apr 7, 2016 at 7:08 AM, Matthieu Heitz <span dir="ltr"><<a href="mailto:heitz.matthieu@gmail.com" target="_blank">heitz.matthieu@gmail.com</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div><div dir="ltr"><div><div><div><div>Hi all !<br><br></div>I have a template class myClass<T>, where T can be a scalar (float, int, double, etc.)<br></div>I would like to create a vtkFloatArray, vtkIntArray, or vtkDoubleArray, depending on the type T.<br></div>I thought that vtkDataArrayTemplate<T> would be a good solution.<br></div>Unfortunately, it is a virtual class, so I can't write this :<br><br>vtkSmartPointer< vtkDataArrayTemplate<T> > array =  vtkSmartPointer<vtkDataArrayTemplate<T> >::New();<br><div><br></div><div>because when I try to instantiate a myClass<float>, I get the error :<br><br>error: invalid conversion from ‘vtkObject*’ to ‘vtkDataArrayTemplate<float>*’ [-fpermissive]<br><br></div><div>So
 my question is: Is there an non-virtual version of vtkDataArrayTemplate
 that would allow me to create a vtkFloatArray when T is float, 
vtkDoubleArray when T is double, etc.<br><br></div><div>P.S: I use VTK 6.0.0<br></div><div><br></div>Thank you !<div><div><img src="https://ssl.gstatic.com/ui/v1/icons/mail/images/cleardot.gif"></div></div><span><font color="#888888"><div><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr">Matthieu Heitz<br></div></div></div></div></div></div></div>
</font></span></div>
<br></div></div>_______________________________________________<br>
Powered by <a href="http://www.kitware.com" rel="noreferrer" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" rel="noreferrer" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" rel="noreferrer" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
<br>
Search the list archives at: <a href="http://markmail.org/search/?q=vtkusers" rel="noreferrer" target="_blank">http://markmail.org/search/?q=vtkusers</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://public.kitware.com/mailman/listinfo/vtkusers" rel="noreferrer" target="_blank">http://public.kitware.com/mailman/listinfo/vtkusers</a><br>
<br></blockquote></div><span><font color="#888888"><br><br clear="all"><div><br></div>-- <br><div>Cory Quammen<br>R&D Engineer<br>Kitware, Inc.</div>
</font></span></div>
<br>_______________________________________________<br>
Powered by <a href="http://www.kitware.com" rel="noreferrer" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" rel="noreferrer" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" rel="noreferrer" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
<br>
Search the list archives at: <a href="http://markmail.org/search/?q=vtkusers" rel="noreferrer" target="_blank">http://markmail.org/search/?q=vtkusers</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://public.kitware.com/mailman/listinfo/vtkusers" rel="noreferrer" target="_blank">http://public.kitware.com/mailman/listinfo/vtkusers</a><br>
<br></blockquote></div><br></div>
</div></div></blockquote></div><br></div></div>