[vtk-developers] Removed windows.h from VTK headers.

Sebastien BARRE sebastien.barre at kitware.com
Thu Dec 16 10:41:05 EST 2004


At 12/15/2004 10:11 AM, Brad King wrote:

>2.) A few virtual functions in VTK were renamed and replaced by
>   non-virtuals that forward their calls to a virtual internal
>   implementation.  User code calling these methods will not be
>   affected.  User code wishing to override these methods in a subclass
>   will have to rename to the internal name.  Such user methods will
>   also be exposed by the above mentioned CMake script.

I definitely like less compilation time, but what is the extent of that 
change, I mean, how much *hacking* is expected on a decent size project to 
make it work correctly with the new change ?

When I look at Widgets/vtkKWRenderWidget, I'm a little scared:

Instead of a single virtual RemoveProp (which I *know* is overriden in 
subclasses)

         virtual RemoveProp(vtkProp *prop)

We end up with "that" in the .h (and as you said, the RemoveProp is 
non-virtual, thus breaking the subclass):

#ifdef VTK_WORKAROUND_WINDOWS_MANGLE
   // Avoid windows name mangling.
# define RemovePropA RemoveProp
# define RemovePropW RemoveProp
#endif

   // Description:
   // Manage props inside this widget renderer(s). Add, remove, query.
   void RemoveProp(vtkProp *prop);

#ifdef VTK_WORKAROUND_WINDOWS_MANGLE
# undef RemovePropA
# undef RemovePropW
   //BTX
   // Define possible mangled names.
   void RemovePropA(vtkProp*);
   void RemovePropW(vtkProp*);
   //ETX
#endif

[...]
   virtual void RemovePropInternal(vtkProp* prop);

Ouch.
and that stuff in the .cxx:

//----------------------------------------------------------------------------
#ifdef VTK_WORKAROUND_WINDOWS_MANGLE
# undef RemoveProp
// Define possible mangled names.
void vtkKWRenderWidget::RemovePropA(vtkProp* p)
{
   this->RemovePropInternal(p);
}
void vtkKWRenderWidget::RemovePropW(vtkProp* p)
{
   this->RemovePropInternal(p);
}
#endif
void vtkKWRenderWidget::RemoveProp(vtkProp* p)
{
   this->RemovePropInternal(p);
}

This is not a great sight.

It's interesting because I remember 4 or 5 years ago we had a lot of 
discussons on how to speed up compilation time in the users list, on 
Borland and MSVC, and many people suggested solutions. At that time, I was 
not at Kitware already, but I wrote a Perl script that would significantly 
reduce compile time by detecting the headers that were most used, in what 
order, and would create a unique .h that could be pre-compiled/processed, 
yadi yada, a hack too which I'm glad did not make it through actually, but 
I think it was rejected because it introduced like... 2 or 3 extra-lines of 
#pragma in some headers, and also a global feeling that it was not too good 
to introduce that much compiler/system specific code in the source tree...

--
Sebastien Barre





More information about the vtk-developers mailing list