2013-10-21 57 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_你的答案! –

相關問題