У меня есть класс, для которого требуется boost::variant, содержащий общие указатели на различные типы следующим образом:
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...
}
В настоящее время для компиляции этого класса требуются параметры шаблона следующего вида:
ToyPicker<
boost::variant<
boost::shared_ptr<ToyModel>
>,
boost::variant<
boost::shared_ptr<BlueToy>,
boost::shared_ptr<RedToy>,
boost::shared_ptr<GreenToy>
>
> toyPicker;
Как мне использовать список mpl, чтобы я мог разрешить следующее гораздо более простое определение для пользователей, а затем преобразовать его в приведенный выше формат примера внутри моей реализации класса?
ToyPicker<
boost::mpl::list<
ToyModel
>,
boost::mpl::list<
BlueToy,
RedToy,
GreenToy
>
> toyPicker;