如何构建const FB :: variant&进入c ++中的用户定义类?

时间:2013-10-15 07:04:47

标签: c++ casting firebreath variant

我是tryintg来施展const FB :: variant&用C ++编写SampleJS *样本。 像这样:

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

我不知道这里出了什么问题。 这给了我错误:

boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_any_cast> > 

提前谢谢。

1 个答案:

答案 0 :(得分:1)

您需要了解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