
Hello, I have a class that requires a boost::variant containing shared pointers to various types as follows: template <typename ToySharedPtrVariant, typename ColorSharedPtrVariant> class ToyPicker { typedef std::pair< ToySharedPtrVariant, ColorSharedPtrVariant > toyAndColorPair; typedef std::map< std::string, std::vector< toyAndColoPair > > stringToToyColorPairMap; // ... methods that use the defined types... } This class currently requires template parameters of the following form to compile: ToyPicker< boost::variant< boost::shared_ptr<ToyModel> >, boost::variant< boost::shared_ptr<BlueToy>, boost::shared_ptr<RedToy>, boost::shared_ptr<GreenToy> > > toyPicker; How do I use an mpl list so that I can allow the following much simpler definition for users, then convert it into the one above inside my class? ToyPicker< boost::mpl::list< ToyModel >, boost::mpl::list< BlueToy, RedToy, GreenToy > > toyPicker; I really appreciate all of the user help you all give, and hope that as I become more experienced I may be able to contribute myself. Cheers! Andrew Hundt