повысить любой — C ++ универсальный тип данных

Каков наилучший подход к fast универсальный тип данных в C ++. У меня есть система событий, которая должна быть в состоянии передавать информацию о событиях по программе.

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 * data hold, но это очень быстро получилось.

0

Решение

Если у вас есть ограниченный набор поддерживаемых типов, вы можете попробовать 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
1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector