我正在尝试将const FB::variant&sample转换为C++中的SampleJS *。
像这样:

SampleJS* info = sample.cast<SampleJS*>();

我不知道这里出了什么问题。
这给了我以下错误:
boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_any_cast> >

先感谢您。

最佳答案

您需要了解FB::variant仅存储放入其中的任何类型。如果内部恰好是MouseInfoJS *,那么您的代码将绝对有效。但是,由于FB::variant类的设计使其难以(但并非不可能)在其中存储未知类型,因此您必须进行大量工作才能将类似内容放入其中。

因此,基本上,您想要做的事情可能没有任何意义,因此您无法做到。

根据MouseInfoJS的类型,这可能是有道理的。 MouseInfoJS是否继承自JSAPI? (或JSAPIAuto?)如果这样,那么尝试您正在做的事情在某种意义上是有意义的,除了您永远不会拥有MouseInfoJS *之外,您将拥有一个MouseInfoJSPtr,这对于boost::shared_ptr来说是typedef ,因为它随后将部分归页面所有,因此在其中存储原始指针很危险。

即使在这种情况下,您需要使用.convert_cast<MouseInfoJSPtr>而不是.cast,它也不能在大多数现代浏览器上使用,因为它们将FireBreath返回的NPObject包装在另一个对象中,这不允许我们找回原始对象。我相信这是一项安全功能。有关更多信息,请参见A firebreath JSAPI will not be recognized in firefox

07-24 09:25