Pregunta

Actualmente me enfrento a un problema que no he podido resolverme. Básicamente, lo que estoy tratando de hacer es implementar un comportamiento similar a LINQ en C ++.

Comenzaré con el código en mi encabezado:

template<typename T, template<class = T> class A,
         template<class = T, template<class=T> class = A> class C>
class queryable
{
public:
    typedef T value_type;
    typedef A<value_type> allocator_type;
    typedef C<value_type, allocator_type> container_type;    // (1)
    typedef queryable<T, A, C> type;
    queryable(container_type const &) { }
    template<typename _Out> queryable<_Out, A, C> select(/* some delegate */);
    // more methods etc
}

Y así es como me gustaría que fuera instanciado:

std::vector<int> my_vec;
queryable<std::vector<int> > q(my_vec);

No hace falta decir que esto no funciona (de otro tipo no estaría aquí :))

Ahora la parte aún más extraña es que incluso esto no parece funcionar:

std::vector<int> my_vec;
queryable<int, std::allocator, std::vector> q(my_vec);

Como puede ver (mirando la función seleccionada), es importante para mí no solo usar algo como esto:

template<typename T> class queryable;

¿Alguna sugerencia sobre cómo resolver esto? ¿Y esto es posible?

¡Cualquier ayuda sería apreciada!

Editar: los errores que recibo:

../entry.cpp:19:58: error: type/value mismatch at argument 3 in template parameter list for ‘template<class T, template<class> class A, template<class, template<class> class<template-parameter-2-2> > class C> class failproof::collections::queryable’
../entry.cpp:19:58: error:   expected a template of type ‘template<class, template<class> class<template-parameter-2-2> > class C’, got ‘template<class _Tp, class _Alloc> class std::vector’
../entry.cpp:19:61: error: invalid type in declaration before ‘;’ token

Editar 2:

Por lo que entiendo, el compilador se queja de que C no toma 2 argumentos de clase, sino 1 argumento de clase y 1 argumento de clase plantado (1), porque definí que C fuera así. ¿Hay alguna forma de resolver este problema?

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top