2013-10-21 4 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

답을 알려주세요. –