<br>Hi Frederic,<br><br><br>The function:<br><br><span style="font-family: courier new,monospace;">     
template&lt;typename TITKImgType&gt;</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">     bool</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">     WriteFile(</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">         const 
std::string&amp; a_fullFilename,</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">     
    typename TITKImgType::<span style="background-color: rgb(255, 255, 153);">ConstPointer</span>);</span><br>

<br>will be better written as<br><br><span style="font-family: courier new,monospace;">     
template&lt;typename TITKImgType&gt;</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">     bool</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">     WriteFile(</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">         const 
std::string&amp; a_fullFilename,</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">     
    const TITKImgType * );</span><br>

<br><br>and you will be able to call it as<br><br>    ImgType::Pointer image = filter-&gt;GetOutput();<br><br>    WriteFile&lt;ImgType&gt;(&quot;out.mhd&quot;, image<span style="background-color: rgb(255, 255, 153);"> </span>);<br>
<br><br><br>(not need to use &quot;GetPointer()&quot; in this case)<br><br><br>Normally you don&#39;t need to call GetPointer() in ITK.<br><br><br><br>Regards,<br><br><br>      Luis<br><br><br>-------------------------------------------------------------------------<br>
<div class="gmail_quote">On Fri, May 28, 2010 at 4:32 AM, Frederic Perez <span dir="ltr">&lt;<a href="mailto:fredericpcx@gmail.com">fredericpcx@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Hello Stuart,<br><br>I would like to be able to do those kinds of assignments too!<br><br>For example, in our group we have functions like this one:<br><br><span style="font-family: courier new,monospace;">     template&lt;typename TITKImgType&gt;</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">     bool</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">     WriteFile(</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">         const std::string&amp; a_fullFilename,</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">         typename TITKImgType::<span style="background-color: rgb(255, 255, 153);">ConstPointer</span>);</span><br>


<br>declared this way to promise that <span style="font-family: courier new,monospace;">WriteFile </span>won&#39;t modify the input image.<br> (By the way, the template stuff is not relevant to this thread.)<br><br>In order to workaround the const-vs-nonconst problem, we do calls like this:<br>


<br><div style="margin-left: 40px; font-family: courier new,monospace;">typedef itk::Image&lt;int, 3&gt; ImgType;<br><span style="background-color: rgb(255, 255, 255);">ImgType::<span style="background-color: rgb(255, 255, 153);">Pointer </span></span>image = ImgType::New();<br>


...<br></div><div style="margin-left: 40px; font-family: courier new,monospace;">WriteFile&lt;ImgType&gt;(&quot;out.mhd&quot;, image<span style="background-color: rgb(255, 255, 153);">.GetPointer()</span>);<br></div><br>

Unfortunately, this populates the code with lots of <span style="font-family: courier new,monospace;">GetPointer()</span> that we would like to get rid of.<br>
Not a real solution, but maybe you can use it.<br><br>I would like to hear more on this issue.<br><br>Cheers,<br><font color="#888888"><br>Frederic Perez<br><br></font><div class="gmail_quote"><div><div></div><div class="h5">
On Thu, May 27, 2010 at 7:21 PM, Stuart Golodetz <span dir="ltr">&lt;<a href="mailto:itk@gxstudios.net" target="_blank">itk@gxstudios.net</a>&gt;</span> wrote:<br>

</div></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div><div></div><div class="h5">



<div bgcolor="#ffffff" text="#000000">
<div style="font-family: -moz-fixed; font-size: 13px;" lang="x-western">
<pre>Hi,

Hope this is the right place to post this. I was just wondering if 
there&#39;s a reason why itk::SmartPointer was designed so as not to allow e.g.

itk::Image&lt;int,3&gt;::Pointer image;
const itk::Image&lt;int,3&gt;::ConstPointer&amp; cimage = image;

?

The equivalent with boost::shared_ptr is allowed, e.g.

boost::shared_ptr&lt;int&gt; p(new int);
const boost::shared_ptr&lt;const int&gt;&amp; cp = p;

This doesn&#39;t seem like a major problem, until you start writing 
functions taking const itk::Image&lt;...&gt;::ConstPointer&amp; parameters - at 
which point it won&#39;t let you pass a normal Pointer in without explicitly 
constructing a ConstPointer from it. Now the types are often quite long, 
and it&#39;s annoying to have to add extra typedefs in the calling code just 
for that purpose. Duplicating the functions with const 
itk::Image&lt;...&gt;::Pointer&amp; parameters doesn&#39;t work either, because you 
get a combinatorial explosion when you have multiple such parameters. 
For instance, with 3 parameters, you have to create functions with 
combinations:

const Pointer&amp;, const Pointer&amp;, const Pointer&amp;
const Pointer&amp;, const Pointer&amp;, const constPointer&amp;
const Pointer&amp;, const ConstPointer&amp; const Pointer&amp;
// more here
const ConstPointer&amp;, const ConstPointer&amp; const ConstPointer&amp;

This seems like an unproductive way to spend one&#39;s time, to say the 
least. The only other &quot;reasonable&quot; alternative I&#39;ve managed to come up 
with that doesn&#39;t either (a) clutter up the call site or (b) cause the 
combinatorial explosion just outlined, is to just use the non-const 
Pointers everywhere and abandon the idea of making the code 
const-correct. But that seems defeatist to me <span><span> :) </span></span> Please could you tell 
me if there&#39;s something I&#39;m missing? (And if so, what?)

Cheers,
Stuart
</pre>
</div>
</div>

<br></div></div><div class="im">_____________________________________<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at<br>
<a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Kitware offers ITK Training Courses, for more information visit:<br>
<a href="http://www.kitware.com/products/protraining.html" target="_blank">http://www.kitware.com/products/protraining.html</a><br>
<br>
Please keep messages on-topic and check the ITK FAQ at:<br>
<a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
<br></div></blockquote></div><br><div style="display: inline;"></div>
<br>_____________________________________<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at<br>
<a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Kitware offers ITK Training Courses, for more information visit:<br>
<a href="http://www.kitware.com/products/protraining.html" target="_blank">http://www.kitware.com/products/protraining.html</a><br>
<br>
Please keep messages on-topic and check the ITK FAQ at:<br>
<a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
<br></blockquote></div><br>