В большинстве случаев проблемы такого типа должны решаться с помощью общего базового класса. Это тот случай, когда все классы будут использоваться одинаково. Время полиморфизма.
Я видел законные причины, чтобы не разрешить общий базовый класс. В этом случае boost::variant
, как правило, лучше работает на сервере, так как все еще существуют методы, позволяющие обрабатывать каждый элемент одинаково (посетитель) Полиморфизм времени компиляции.
Я никогда не видел законного использования для boost::any
. Я не говорю, что его нет, но это так редко, что я с ним никогда не сталкивался.
Тем не менее, попробуйте это.
std::map<std::string,boost::any> someMap;
boost::any insanity = new MyClass<SomeTemplate>;
someMap.insert("Test",insanity);
или
boost::ptr_map<std::string,boost::any> someMap;
boost::any* ive_lost_it = new boost::any( new MyClass<SomeTemplate> );
someMap.insert("Test", ive_lost_it );