[Insight-developers] ITKImageFunction dependecy in Transform

M Stauffer (V) mstauff at verizon.net
Thu Aug 18 08:54:40 EDT 2011


Hi Matt,

This issue has popped up again, see below...

>>>>> In rebasing the Transform changes patch set onto the latest
>>>>itk master, I've
>>>>> got a dependency problem. DeformationFieldTransform
>>>>> includes itkVectorLinearInterpolateImageFunction.h, which is
>>>>> in ITKImageFunction. But adding this to
>>>>Transform/itk-module.cmake causes a
>>>>> circular dependency. Any suggestions? I don't know how to
>>>>handle this.
>>>>
>>>>That is a difficult problem.  Moving DeformationFieldTransform to
>>>>ITKImageFunction would probably not be appropriate.  Is it 
>>possible to
>>>>use a C++ forward declaration for
>>>>VectorLinearInterpolateImageFunction?  I assume that any module
>>>>depending on ITKTransform is also likely to depend on 
>>ITKImageFunction
>>>>anyway.
>>>
>>> OK, a forward declare works. Of course I have to declare 
>the template
>>> parrameters along with the forward declaration so it's a 
>>little messy in
>>> that it will need changing if the 
>>VectorLinearInterpolateImageFunction
>>> template parameters change. Although if the class template 
>>pararmeters
>>> change, lots of classes will change so I figure that's not a real
>>> problem. So is forward-declaration like this ok in the ITK style?
>>
>>Great.
>>
>>ITK has very strong backwards compatibility, changes to the API like
>>that will not take place after the ITKv4 release, and changes that
>>break compatibility during ITKv4 need to have migration documents.
>>http://www.vtk.org/Wiki/ITK_Release_4/Users_Migration_Guide
>>
>>Forward declaration is not typical ITK style.  However, if it is
>>documented with a comment in the code explaining the need to break
>>circular dependency, it could be OK.
>>

It turns out this has worked only because the cxx files where
itkDisplacementTransform.h is included also include
itkVectorInterpolateImageFunction.h and
itkVectorLinearIntepolateImageFunction.h. Of course these have to be
included somewhere for the forward-declare to work, but this seems bad
for the use to have to include these other two headers separately.

Looking at Core/ImageFunction, the only class that includes Transform is
RayCastInterpolateImageFunction. Would it make sense to move this to
another module so that ImageFunction needn't depend on Transform?

-M



More information about the Insight-developers mailing list