Hi Bill,<br>Thanks for your reply.<br><br>However, with this scheme you are unable to have &lt;i&gt;class member variables&lt;/i&gt; that are of templated type. Say for example, I need to read data from a file inside a class method. So, I find the underlying data type and dimensions and read the data. However, if I want to access this data later or basically store it in the class, how can I do that?<br>
<br>For example,<br><br>If I have a class<br><br>MyReader<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void SomeReaderMethod()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // find the type and initialize<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyTemplatedMethod&lt;datatype, dimensions&gt; mtm;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>}<br><br>This variable now only has local scope inside the function. How can I make a class member point to it since the templated arguments are only defined at run-time?<br><br>I hope I am successful in specifying my problem here... have a feeling that I am not being clear enough as to what the hurdle is...<br>
<br>Thanks,<br>Anja<br><br><div><span class="gmail_quote">On 20/02/2008, <b class="gmail_sendername">Bill Lorensen</b> &lt;<a href="mailto:bill.lorensen@gmail.com">bill.lorensen@gmail.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div>Anja,</div>
<div>&nbsp;</div>
<div>Yes, at compile time you will need to instantiate each type you expect. At runtime you can&nbsp;determine which type to use with something like this:</div>
<div><br>namespace itk<br>{<br>&nbsp; // Description:<br>&nbsp; // Get the PixelType and ComponentType from fileName<br>&nbsp; void GetImageType (std::string fileName,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageIOBase::IOPixelType &amp;pixelType,<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageIOBase::IOComponentType &amp;componentType)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typedef itk::Image&lt;unsigned char, 3&gt; ImageType;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; itk::ImageFileReader&lt;ImageType&gt;::Pointer imageReader =<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; itk::ImageFileReader&lt;ImageType&gt;::New();<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imageReader-&gt;SetFileName(fileName.c_str());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imageReader-&gt;UpdateOutputInformation();</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pixelType = imageReader-&gt;GetImageIO()-&gt;GetPixelType();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; componentType = imageReader-&gt;GetImageIO()-&gt;GetComponentType();<br>&nbsp;&nbsp;&nbsp; }<br>}</div>
<div>&nbsp;</div>
<div>Then in your application do something like this:</div>
<div>&nbsp;</div>
<div>&nbsp; itk::ImageIOBase::IOPixelType pixelType;<br>&nbsp; itk::ImageIOBase::IOComponentType componentType;</div>
<div>&nbsp; try<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; itk::GetImageType (inputVolume, pixelType, componentType);</div>
<div>&nbsp;&nbsp;&nbsp; // This filter handles all types<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; switch (componentType)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case itk::ImageIOBase::UCHAR:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return DoIt( static_cast&lt;unsigned char&gt;(0));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case itk::ImageIOBase::CHAR:<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return DoIt(&nbsp;static_cast&lt;char&gt;(0));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case itk::ImageIOBase::USHORT:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return DoIt(&nbsp;static_cast&lt;unsigned short&gt;(0));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case itk::ImageIOBase::SHORT:<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return DoIt(&nbsp;static_cast&lt;short&gt;(0));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case itk::ImageIOBase::UINT:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return DoIt(&nbsp;static_cast&lt;unsigned int&gt;(0));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case itk::ImageIOBase::INT:<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return DoIt(&nbsp;static_cast&lt;int&gt;(0));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case itk::ImageIOBase::ULONG:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return DoIt(&nbsp;static_cast&lt;unsigned long&gt;(0));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case itk::ImageIOBase::LONG:<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return DoIt(&nbsp;static_cast&lt;long&gt;(0));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case itk::ImageIOBase::FLOAT:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return DoIt(&nbsp;static_cast&lt;float&gt;(0));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case itk::ImageIOBase::DOUBLE:<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return DoIt(&nbsp;static_cast&lt;double&gt;(0));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case itk::ImageIOBase::UNKNOWNCOMPONENTTYPE:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; &quot;unknown component type&quot; &lt;&lt; std::endl;<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; catch( itk::ExceptionObject &amp;excep)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; argv[0] &lt;&lt; &quot;: exception caught !&quot; &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; excep &lt;&lt; std::endl;<br>

&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; return EXIT_SUCCESS;<br>}<br></div>
<div>where Doit is your method:</div>
<div>template&lt;class T&gt; int DoIt(T )<br>{<br>...</div>
<div>}</div>
<div>&nbsp;</div>
<div>CAUTION: your compiler may not be able to instantiate all type without having stack overflow or other problems, You can sometimes combine some of the types (like unsigned int and int) to reduce the number needed.</div>


<div>&nbsp;</div>
<div>Bill</div>
<div>&nbsp;</div>
<div><br>&nbsp;</div>
<div class="gmail_quote"><div><span class="e" id="q_118370823d5356b2_1">On Wed, Feb 20, 2008 at 7:04 AM, Anja Ende &lt;<a href="mailto:anja.ende@googlemail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">anja.ende@googlemail.com</a>&gt; wrote:<br>

</span></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0px 0px 0px 0.8ex; padding-left: 1ex;"><div><span class="e" id="q_118370823d5356b2_3">Hi everyone,<br><br>A quick question about using ITK classes. I am using C++ and am having a bit of trouble understanding how I can use the templated classes without instantiating for every possible type combination.<br>

<br>A simple example:<br><br>I have a custom file reader where the data type and dimensions are something that is only available at run time..<br><br>So, now if I want to have a class member that uses a reader, I have to somehow define these template parameters at runtime... What I wanted was to have one reader which has one instance of the ImageImportFilter instance. However, to declare this class I need to define the template parameters for the ImportImageFilter at design time. So, now if a file is inputted with a different input data type and a dimension, I am stuck!<br>

<br>Any ideas??<br><br>Cheers,<br><font color="#888888"><br>Anja </font><br></span></div>_______________________________________________<br>Insight-users mailing list<br><a href="mailto:Insight-users@itk.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">Insight-users@itk.org</a><br>

<a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://www.itk.org/mailman/listinfo/insight-users</a><br><br></blockquote></div><br>
</blockquote></div><br><br clear="all"><br>-- <br>Cheers,<br><br>Anja