|
Boost Users : |
From: cp now (cppnow_at_[hidden])
Date: 2008-01-21 11:57:08
Hello.
I am trying to instantiate a template taking two parameters across a series
of types contained in mpl::vector's, and place the resulting types in an
mpl::vector.
template <class A, class B> class T {};
typedef mpl::vector<int, double, char> Atypes;
typedef mpl::vector<double, std::string> Btypes;
template <template <class, class> class TEMPLATE,
class ATYPE,
class BTYPES,
class CLASSES>
struct unary_fold_inner : mpl::fold<
BTYPES,
CLASSES,
mpl::push_back<mpl::_1, TEMPLATE<ATYPE, mpl::_2> >
> {};
template <template <class, class> class TEMPLATE,
class ATYPES,
class BTYPES>
struct unary_fold : mpl::fold<
ATYPES,
mpl::vector<>,
typename detail::unary_fold_inner<TEMPLATE, mpl::_2, BTYPES,
mpl::_1>::type
> {};
typedef unary_fold<
T,
Atypes,
Btypes
>::type CLASSES;
I expect CLASSES will be an mpl::vector containing 2x3=6 types as follows:
T<int, double>
T<int, std::string>
T<double, double>
T<double, std::string>
T<char, double>
T<char, std::string>
in other words, instantiating template T across all permutations of Atypes
and Btypes.
What I see instead is puzzling. Classes is indeed an mpl::vector, and indeed
contains 6 types, but the types are simply:
T<double, double>
T<std::string, std::string>
T<double, double>
T<std::string, std::string>
T<double, double>
T<std::string, std::string>
The iteration I'm trying to accomplish is all wrong. I think it has to do
with how I'm creating my metafunctions. I'm still unclear about when the
::type suffix is needed (for the last parameter to mpl::fold<> for example)
and whether I need an "apply" template somewhere in my struct's.
Any help appreciated.
v
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net