[Insight-developers] ExceptionObject Borland Compile errors

Karthik Krishnan karthik.krishnan at kitware.com
Thu May 29 10:16:05 EDT 2008


Also line 255 should read

  ExceptionObject::SetDescription( description );

instead of

  ExceptionObject::SetLocation( description );

--
k

On Thu, May 29, 2008 at 8:29 AM, Niels Dekker <niels-xtk at xs4all.nl> wrote:
> Luis Ibanez wrote:
>>
>> Following Brad's suggestion [...]
>> An interface/facade class was added that simply provides the
>> Register()/UnRegister() API expected by the SmartPointer.
>>
>> See changes in the following links (.h and .cxx)
>>
>> http://www.itk.org/cgi-bin/viewcvs.cgi/Code/Common/itkExceptionObject.h?root=Insight&r1=1.37&r2=1.38&sortby=date
>>
>> http://www.itk.org/cgi-bin/viewcvs.cgi/Code/Common/itkExceptionObject.cxx?root=Insight&r1=1.12&r2=1.13&sortby=date
>>
>> This class is then used in the .cxx file as the base class
>> of the ExceptionData class. The Register/UnRegister methods
>> are now overloaded in ReferenceCountedExceptionData and are
>> delegated to its second parent, the LightObject.
>
> Thanks for helping me out, Luis!  I'm sorry I wasn't at my computer anymore
> last evening.  Actually I did send a revised version yesterday, to Brad and
> Bill, but I wasn't sure if it was allowed to CC it to the mailing list.  Are
> attachments allowed, on the mailing list?
>
> Anyway, my revision was far less sophisticated than yours: it had just one
> helper class ("ExceptionData"), that contains *both* the exception data and
> the Register()/UnRegister() methods, as well as the reference counter
> itself.  (It didn't use LightObject anymore.) The class definition of
> ExceptionData would need to be in itkExceptionObject.h, to make Borland
> happy.  Brad mailed me that it should work. But unfortunately Bill mailed me
> that Borland stilll didn't like it. Bill, can you please tell us what
> Borland complained about?
>
> So I'm sorry I didn't CC my revision to you as well, but honestly I do like
> your fix slightly more than mine.  :-)  Especially because it still uses
> LightObject, which does reference counting in a thread safe way.
>
> Two little remarks:
> itkExceptionObject.cxx now says:
>
>  const ExceptionObject::ReferenceCountedExceptionData *
>  ExceptionObject::GetExceptionData() const
>  {
>    const ReferenceCountedExceptionData * thisData =
>      dynamic_cast< const ReferenceCountedExceptionData *>(
>       this->m_ExceptionData.GetPointer() );
>    return thisData;
>  }
>
> I think that dynamic_cast only makes sense if you check afterwards whether
> or not it's successful. But I think that this runtime checking isn't really
> necessary this time. So you might as well do static_cast.
>
> You added some c_str() calls:
>
> m_ExceptionData = ReferenceCountedExceptionData::ConstNew(
>  IsNull ? "" : this->GetExceptionData()->m_File.c_str(),
>  IsNull ? 0 : this->GetExceptionData()->m_Line,
>  IsNull ? "" : this->GetExceptionData()->m_Description.c_str(),
>  s);
>
> Did you do so because of compiler complaints?  Anyway, this has the effect
> of converting the arguments from std::string to char-pointer, and then back
> to std::string again.  Instead I think it would be preferable to stick with
> std::string:
>
> m_ExceptionData = ReferenceCountedExceptionData::ConstNew(
>  IsNull ? std::string() : this->GetExceptionData()->m_File,
>  IsNull ? 0 : this->GetExceptionData()->m_Line,
>  IsNull ? std::string() : this->GetExceptionData()->m_Description,
>  s);
>
> As you see, I replaced the literal ("") by std::string(), to avoid those
> possible compilers complaints.  What do you think?
>
> Kind regards,
>
>  Niels
> _______________________________________________
> Insight-developers mailing list
> Insight-developers at itk.org
> http://www.itk.org/mailman/listinfo/insight-developers


More information about the Insight-developers mailing list