1

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> > 

前もって感謝します。

4

1 に答える 1

1

FB::variant は、それに入れられた型を格納するだけであることを理解する必要があります。あなたのコードは絶対に機能します...内部がたまたまMouseInfoJS *である場合。ただし、FB::variant クラスは、未知の型を内部に格納することを困難にするように設計されていますが、不可能ではないため、そのようなものを内部に配置するには多くの作業を行う必要があります。

基本的に、あなたがやろうとしていることはおそらく意味をなさないので、それを行うことはできません.

MouseInfoJS のタイプによっては、意味があるかもしれません。MouseInfoJS は JSAPI を継承していますか? (または JSAPIAuto?) もしそうなら、MouseInfoJS* を決して持たないことを除いて、あなたがやっていることを試すことはいくらか理にかなっています.MouseInfoJSPtr を持っているでしょう。 、ページによって部分的に所有されるため、そこに生のポインターを格納するのは危険です。

この場合でも、.convert_cast<MouseInfoJSPtr>ではなくを使用する必要がありますが.cast、最近のほとんどのブラウザーでは機能しません。これは、FireBreath によって返された NPObject が別のオブジェクトにラップされており、元のオブジェクトを取り戻すことができないためです。これはセキュリティ機能だと思います。詳細については、「firebreath JSAPI が firefox で認識されない」を参照してください。

于 2013-10-15T18:20:15.770 に答える