Из руководства я понял, что vtksafedowncast — это безопасная операция. Но в моем приложении иногда происходит сбой, когда я пытаюсь преобразовать vtkactor в vtkprop (это происходит очень случайно). Я проверил на ноль перед прохождением vtkactor. Есть ли обработка исключений или какая-то другая проверка, чтобы убедиться, что актер пригоден для преобразования?
Вы можете использовать dynamic_cast<> чтобы попробовать, но ваш компилятор должен поддерживать RTTI.
class vtkActor:public vtkProp (){}; //their relationship
так что вы можете привести указатель vtkActor обратно к указателю vtkProp с помощью dynamic_cast<>.
Что касается vtkSafeDowncast, попробуйте это.
vtkActor * foo ;
foo = vtkActor::New() ;
vtkProp * m_prop ;
m_prop = (vtkProp*)(vtkProp::SafeDownCast(foo));
Или если используется dynamic_cast<>:
m_prop = dynamic_cast<vtkProp*>(foo) ;
Вам даже не понадобится приведение, так как vtkActor наследуется от vtkProp. Вы можете просто сделать
vtkProp* p = vtkActor::New();