Здравствуйте, pilot.net, Вы писали:
PN>Можно ли это как-то оптимизировать, желательно без макросов
Зависит от целей. Если рассматривать чистый С++ как язык, то помимо class и struct сразу же вспоминается union. Поскольку я не любитель велосипедов, то могу предложить посмотреть реализацию типа variant в Boost или Qt. Понятное дело Boost гораздо ближе к основе.
http://www.boost.org/doc/libs/1_58_0/doc/html/variant.html
http://www.boost.org/doc/libs/1_58_0/doc/html/any.html
http://doc.qt.io/qt-4.8/qvariant.html