0

fastC++のジェネリック データ型への最善のアプローチは何ですか。プログラム全体でイベント情報を渡す必要があるイベント システムがあります。

sendEvent(123, "a String", aFloat, aVec3, etc); // sendEvent(EventID, EventArg, EventArg ...);

eventData.at(0).asFloat();
eventData.at(1).asInt(); // etc.

今まで必要だったのは float/int/ptr だけで、ユニオン内で処理していました。しかし、今はほとんどの構造がいくつかあり、これはもう少し複雑になってきているので、再検討しています。

掘り下げてみましたboost::anyが、これは遅すぎます。大量のデータが飛び交う可能性がありますが、この考えは正しい方向に思えます。

私は void* データ ホールドを使用してかなり素朴なショットを撮りましたが、それはすぐに非常に醜くなりました。

4

1 に答える 1

1

サポートされているタイプのセットが限られている場合は、 を試すことができますboost::variant。それは多かれ少なかれより良い組合です。使用中のヒープ割り当てを回避し、boost::any最大のパフォーマンスを提供します。

http://www.boost.org/doc/libs/1_56_0/doc/html/variant.html

例:

// create a variant capable of storing int, float and string
boost::variant<int, float, std::string> eventData;
eventData = 42.f; // store a float
float f = boost::get<float>(eventData); // get the float
于 2014-09-06T14:46:30.003 に答える