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><br>Frederic Perez<br><br><div class="gmail_quote">On Thu, May 27, 2010 at 7:21 PM, Stuart Golodetz <span dir="ltr">&lt;<a href="mailto:itk@gxstudios.net">itk@gxstudios.net</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;">



<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>_____________________________________<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><div style="visibility: hidden; display: inline;" id="avg_ls_inline_popup"></div><style type="text/css">#avg_ls_inline_popup {  position:absolute;  z-index:9999;  padding: 0px 0px;  margin-left: 0px;  margin-top: 0px;  width: 240px;  overflow: hidden;  word-wrap: break-word;  color: black;  font-size: 10px;  text-align: left;  line-height: 13px;}</style>