Tcl C ++ API — как печатать безопасно, конвертировать пустой указатель

я использую Tcl_CreateObjCommand (interp, cmdName, proc, clientData, deleteProc) в моем коде и передачи указателя DerivedClass на параметр clientData. В функции обратного вызова я хочу ввести безопасное преобразование (dynamic_cast) clientData обратно в указатель DerivedClass, но компилятор gcc жалуется »source is not a class to pointerMsgstr «Это потому, что clientData является типом пустого указателя. В этом случае как разработчики обычно решают эту проблему при использовании Tcl API?

int main()
{
...
Tcl_CreateObjCommand(interp, cmdName, myCallback, myDerivedClassPointer, (Tcl_CmdDeleteProc *)NULL);
}

myCallback(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj* const objv[])
{
// I want to do something like this, so when the pointer is not a DerivedClassPointer type, throw an exception.
DerivedClass* foo = dynamic_cast<DerivedClass*>(clientData);
if(!foo) throw exception, type conversion fail
}

2

Решение

Как сказал @PeterWood: это невозможно. Кроме того, это ошибка, что любые недействительные указатели были переданы Tcl_CreateObjCommand на первом месте.

Правильный способ (опять же, как заявляет @PeterWood) — убедиться, что ClientData вы получаете всегда в силе. Лучший способ сделать это с помощью функции шаблона, которая проверяет (во время компиляции), что типы являются правильными.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector