コードでTcl_CreateObjCommand(interp, cmdName, proc, clientData, deleteProc)を使用し、DerivedClass ポインターを clientData パラメーターに渡しています。コールバック関数で、clientData を DerivedClass ポインターに安全に変換 (dynamic_cast) したいのですが、gcc コンパイラーが " source is not a class to pointer
" とエラーを出しています。これは、clientData が void ポインターの型であるためです。この使用例では、開発者は通常、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
}