Question

Je suis actuellement confronté à un problème que je n'ai pas pu me résoudre. Fondamentalement, ce que j'essaie de faire, c'est implémenter un comportement de type LINQ en C ++.

Je vais commencer avec le code dans mon en-tête:

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
}

Et c'est ainsi que j'aimerais qu'il soit instancié:

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

Inutile de dire que cela ne fonctionne pas (autre chose que je ne serais pas ici :))

Maintenant, la partie encore plus étrange est que même cela ne semble pas fonctionner:

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

Comme vous pouvez le voir (en regardant la fonction sélectionnée), il est important pour moi de non seulement utiliser quelque chose comme ceci:

template<typename T> class queryable;

Des suggestions sur la façon de résoudre ce problème? Et est-ce même possible?

Toute aide serait appréciée!

Edit: les erreurs que je reçois:

../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

Edit 2:

Pour autant que je comprends, le compilateur se plaint de C ne prenant pas 2 arguments de classe, mais 1 argument de classe et 1 argument de classe modèle (1), parce que j'ai défini C pour être ainsi. Existe-t-il un moyen de résoudre ce problème?

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top