reformulée QuestionModèle récursif?
Je trouve que ma question initiale était pas assez claire et les répliquants mal compris mon problème. Je vais donc essayer de clarifier:
Disons que j'ai deux classes:
struct C { void(*m_func)(C*); };
struct D { std::function<void(D*)> m_func; };
Maintenant, je veux faire une version générique des deux, donc je fais quelque chose comme ceci:
template<typename Func>
struct G
{
Func m_func;
};
Mais maintenant, je ne sais pas comment instancier cette classe:
G<void(*)(G*)> c; //error
G<std::function<void(G*)>> d; //error
G<void(*)(G<void(*)(G<???>*)> *)> c; //???
G<std::function<void(G<std::function<void(G<???>*)>> *)>> d; //???
Quête originale ion:
Salut,
J'ai une classe de modèle qui peut prendre un pointeur de fonction ou un objet :: fonction std comme paramètre. Tout va bien jusqu'à ce que cette fonction utilise un pointeur de la classe de modèle dans sa signature:
#include <functional>
template<typename Func>
class C
{
public:
C() {}
Func m_func;
};
void foo()
{
C<void(*)(C*)> c;
C<std::function<int(C*)>> d;
}
erreurs pertinentes du compilateur:
error C2955: 'C' : use of class template requires template argument list
error C3203: 'function' : unspecialized class template can't be used as a template argument for template parameter 'Func', expected a real type
error C2955: 'std::tr1::function' : use of class template requires template argument list
Comment il résoudre ce problème?
Merci. Je vais essayer ça. :) – user418680