Estoy usando boost :: fusion.Allanar una secuencia de secuencias (de secuencias)
Digamos que tengo algo como el siguiente:
make_vector(1, make_vector('b', 3, make_vector(4, 5.5), "six"), 7, 8)
quiero producir una función f tal que
f(make_vector(1, make_vector('b', 3, make_vector(4, 5.5), "six"), 7, 8))
-> [1, 'b', 3, 4, 5.5, "six", 7, 8]
es decir, una versión aplanada de la secuencia.
No me importa si esta es una vista de la secuencia original o un vector real.
No me importa una solución en C++ 0x si se puede compilar en GCC 4.5.1.
Nota:
Mientras que prefiero no para restringir los elementos de datos, si ayuda, no dude en requerir que los "datos" elementos todos se derivan de una clase base común.
decir
class DataBase {}
template <class T>
class Data : public DataBase
{
public:
Data(const T& x) : m_x(x)
T m_x;
}
template <class T>
T make_data(const T& x) { return Data<T>(x); }
Entonces
make_vector(
make_data(1),
make_vector(
make_data('b'),
make_data(3),
make_vector(
make_data(4),
make_data(5.5)
),
make_data("six")
),
make_data(7),
make_data(8)
)
que la figura a continuación, se puede trabajar con lo que los elementos de datos son mediante el uso de "is_base_of".
WOW! Gracias, intentaré esto y lo miraré más de cerca. Esto se parece mucho al código fuente de impulso que estaba revisando. También estaba basando mi idea en la versión de Haskell, pero no pude obtener el permiso de la derecha sin errores de compilación. – Clinton