什么是C ++中fast
通用数据类型的最佳方法。我有一个事件系统,需要能够在程序周围传递事件信息。
sendEvent(123, "a String", aFloat, aVec3, etc); // sendEvent(EventID, EventArg, EventArg ...);
eventData.at(0).asFloat();
eventData.at(1).asInt(); // etc.
直到现在我只需要float / int / ptr,我在一个union中处理它。但是现在我有了一些最多的结构,这变得有点复杂,所以我重新审视它。
我在boost::any
进行了挖掘,但这太慢了,可能会有很多数据飞来飞去,但这个想法似乎是正确的方向。
我使用void *数据保持了一个相当天真的镜头,但很快就变得非常难看。
答案 0 :(得分: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