0

boostしばらく使っていますが、まだまだ初心者です。boost::any使用または返された型付きオブジェクトを処理するためにテンプレートを使用する必要がなくなったので、私は落ちると思います。それでも、私にとってまだ不便だと思うことの1つは、heldデータを簡潔に、そして確実に後でcast_any.

大会

(case 1)
boost::any a="123456";
std::string s=boost::cast_any<std::string>(a);
(case 2)
boost:any a=123456;
int i=boost::cast_any<int>a;

カスタム boost_any:

(case 1)
boost:any a="123456";
std::string s=a;
(case 2)
boost:any a=123456;
int i=a;

held="123456"プログラムのデバッグ中に、オブジェクトが両方の場合でまったく同じであることを発見したため、この機能が気に入っています。libの内部実装がそれをthink行った可能性があります(保持しているコンテンツをに変換しましたstring)。この例では POD タイプのみを示しています。誰かがこのカスタマイズについて何かを行ったかどうか、またはcast_any.

4

2 に答える 2

0

Boost.Any は特殊なツールで、通常はユーザーが指定したデータをライブラリ型に隠すためのものです。これは、汎用の「型を忘れて、ある」システムではありません。最終的には特定の型にキャストする必要があるため、そのようには機能しません。

間違った型が格納されているとスローされるため、暗黙的な変換の背後に隠すことany_castは悪い考えです。単純な割り当てでそれを行うと、見つけにくいバグの大きな原因になります。

とにかく、 のデバッグ サポートanyは実際のコードとは完全に分離されており、目的を達成するのに役立ちません。本当に暗黙的な変換が必要な場合は、テンプレート化された変換演算子をanyクラスに追加する必要があります。しかし、私はそれに対して強くお勧めしanyます. ほとんどの場合、実際には役に立たないか、他のソリューションの方が優れています。テンプレートを恐れないでください。

于 2015-06-29T08:23:21.627 に答える
0

boost::anyC++ のタイプ セーフな精神で実装されています。実行時の効率と厳密な型指定は、その設計の背後にある制約です。動的な型発見のメカニズムを提供しますが、boost::anyそれ自体はそのようなアクティビティに関与せず、異なる型の値間の暗黙的な変換に協力することもありません。

とにかく、機能を拡張するany(eg )の他の実装があります (可能/安全な場合のターゲット型への暗黙の変換および他の多くの機能)。Poco::DynamicAnyboost::any

このトピックに関する非常に興味深い記事は、DynamicAny (オーバーロード ジャーナル #86 - 2008 年 8 月 - Aleksandar Fabijanic) です。

于 2015-06-29T08:30:23.493 に答える