[英]Tcl C++ API - how to type safe convert a void pointer
我在我的代码中使用Tcl_CreateObjCommand(interp,cmdName,proc,clientData,deleteProc) ,并将DerivedClass指针传递给clientData参数。 在回调函数中,我想将clientData的安全转换(dynamic_cast)输入回到DerivedClass指针,但是gcc编译器抱怨“ source is not a class to pointer
”。 这是因为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
}
正如@PeterWood所说:这是不可能的。 此外,这是一个错误,首先将任何无效的指针传递给Tcl_CreateObjCommand
。
正确的方法(再次如@PeterWood所述)是确保您收到的ClientData
始终有效。 最好的方法是使用模板函数,该函数在编译时检查类型是否正确。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.