C++;泛型数据类型 > C++中的“快速< /COD>通用数据类型”的最佳方法。我有一个事件系统,需要能够在程序中传递事件信息 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进行了深入研究,但这太慢了,可能有很多数据在四处传播,但这个想法似乎是正确的方向C++;泛型数据类型 > C++中的“快速< /COD>通用数据类型”的最佳方法。我有一个事件系统,需要能够在程序中传递事件信息 sendEvent(123, "a String", aFloat, aVec3, etc); // sendEvent(EventID, EventArg, EventArg ...); eventData.at(0).asFloat(); eventData.at(1).asInt(); // etc.,c++,boost-any,C++,Boost Any,到目前为止,我只需要float/int/ptr,我在一个联合体中处理这个问题。但现在我有了一些大多数的结构,这变得有点复杂,所以我要重温一下 我对boost::any进行了深入研究,但这太慢了,可能有很多数据在四处传播,但这个想法似乎是正确的方向 使用void*data hold时,我做了一个相当简单的尝试,但很快就变得非常糟糕。如果支持的类型集有限,可以尝试使用boost::variant。这或多或少是一个更好的结合。它避免了boost::any正在使用的堆分配,并应提供最大性能 例如: /
使用void*data hold时,我做了一个相当简单的尝试,但很快就变得非常糟糕。如果支持的类型集有限,可以尝试使用
boost::variant
。这或多或少是一个更好的结合。它避免了boost::any
正在使用的堆分配,并应提供最大性能
例如:
// 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
//创建一个能够存储int、float和string的变量
变量事件数据;
eventData=42.f;//存放浮子
float f=boost::get(eventData);//拿浮子
如果您只有几个需要传递的指定类型,而不是任何任意类型,那么可能是包含联合的智能指针?