necesito un procedimiento mpl :: igual que admite recursividad en tipos.C++ murs recursivo :: ¿problema igual?
namespace mpl = boost::mpl;
BOOST_MPL_ASSERT((mpl::equal<
mpl::vector<int, char>,
typename mpl::push_back<mpl::vector<int>, char>::type >)); // OK
lo anterior compila bien, sin embargo, si lo uso en MPL :: transformar o MPL :: veces, Visual Studio 2010 RC1 se queja.
typedef mpl::vector<
mpl::vector<int, char>,
mpl::vector<char, char>> type_1;
typedef mpl::transform<
mpl::vector<
mpl::vector<int>,
mpl::vector<char>>,
mpl::push_back<mpl::_, char>>::type type_2;
BOOST_MPL_ASSERT((mpl::equal<type_1, type_2>)); // FAILS
Sin embargo, estos trabajos ...
BOOST_MPL_ASSERT((mpl::equal<
typename mpl::at_c<type_1, 0>::type,
typename mpl::at_c<type_2, 0>::type>)); // OK
BOOST_MPL_ASSERT((mpl::equal<
typename mpl::at_c<type_1, 1>::type,
typename mpl::at_c<type_2, 1>::type>)); // OK
no es lo que MPL :: igual no funciona en tipos recursivos generadas dinámicamente, o es algo malo en mi sintaxis?
cualquier consejo sería muy apreciado.
¿Cómo va a ser más fácil para la metaprogramación con el próximo 'C++ 0x' ... congratz para averiguarlo, supongo que realmente trataste de compilarlo? –
Bueno, me encontré con este problema antes. Pero independientemente, siempre puede usar mpl :: print para forzar al compilador a generar una advertencia que enumera el tipo real de T. –
hkaiser
¡gracias! nunca supe sobre mpl :: print, no está en ninguna parte en los documentos. es un verdadero salvavidas. –
kyunghoon