2013-10-21 27 views
1

我正在使用VTK做某事,但我的问题可能是一般性的。根据其版本切换成员函数名称

在VTK版本< 6.0中,类vtkPolyDataMapper有一个成员函数,称为SetInput,但在其6.0版中,它更改为SetInputData。因此,在第6版,我必须这样做,

vtkSmartPointer<vtkPolyDataMapper> polyDataMapper 
    = vtkPolyDataMapper::New(); 

polyDataMapper->SetInputData(polyData); 
// polyDataMapper->SetInput(polyData); 

理想情况下,我希望这种情况可能容易被处理为

if (vtkVersion::GetVTKMajorVersion() < 6) 
{ 
    plane->SetInput(rgrid); 
} 
else 
{ 
    plane->SetInputData(rgrid); 
} 

但是你知道这是不正确的,所以我的问题是:什么是C++处理这种情况的最好方法。

回答

4

如你所知,你不能让选择在运行时进行,因为编译将失败。

相反,您可以利用预处理器将正确的代码传递给编译器。这是可能的,因为VTK在你的预处理宏中公开它的版本:

#if (VTK_MAJOR_VERSION < 6) 
plane->SetInput(rgrid); 
#else 
plane->SetInputData(rgrid); 
#endif 
+0

来吧 - _explain_你的答案! –

相关问题