Да.
Используйте полиморфизм времени выполнения, который означает определение общего базового класса, скажем Base
, и объявление общих интерфейсов как виртуальных функций в нем, а затем производных от него и реализацию виртуальных функций в производных классах. Если вы это сделаете, то вы можете использовать так:
std::share_ptr<Base> ptr;
//now ptr can store an instance of any derived class from Base
Или вы можете использовать boost::any
, если невозможно определить общий базовый класс. Если вы не можете использовать Boost, вы можете определить класс any
самостоятельно. Поиск типа Erasure на этом сайте и в Google.
Ниже приведена двухстраничная статья о типе Erasure, и вы можете найти реализацию boost::any
на второй странице (хотя и не завершенную):