Je voudrais créer une interface de modèle pour les classes de gestion de données dans mes projets.Transférer la signature de la méthode en tant que paramètre de modèle dans une classe
Je peux écrire quelque chose comme ceci:
template <class T>
class DataHandler
{
public:
void Process(const& T) = 0;
};
Ensuite, supposons, je définir une classe de cette façon:
class MyClass: public DataHandler<int>
{
void Process(const int&) { /* Bla-bla */ }
}
Maintenant, venez la question, puis-je définir en quelque sorte mon interface de modèle dans la façon dont, en tant que paramètre, il recevra non seulement T, mais la signature entière de la fonction Process().
Je voudrais quelque chose travailler de cette façon:
class MyClass: public DataHandler<void (int&)>
{
void Process(const int&) { /* Bla-bla */ }
}
Est-il possible? Je sais que, par exemple, boost :: signal reçoit les paramètres du template de cette façon, mais si je comprends bien, ils utilisent beaucoup de magie noire là-bas.
Maintenant, la question demeure: combien d'années faudra-t-il jusqu'à ce que nous puissions mettre des modèles variadiques à l'usage quotidien au travail. Savoir combien cela peut être plus simple peut faire mal ... –
Et comment dois-je le changer afin de supporter plus d'un paramètre dans la fonction Process() dans l'interface DataProducer? Je veux dire, je voudrais soutenir quelque chose comme DataHandler –
Lev
@Lev, je suppose que vous devrez vous spécialiser partiellement DataHandler sur le type de fonction afin d'obtenir la déclaration de la fonction 'Process' juste aussi. 'boost :: function' utilise le préprocesseur pour générer le code nécessaire, mais pour ses propres projets et quelques utilisations, il n'est guère utile (à mon avis) de vous présenter dans ce sujet dont vous n'avez probablement plus besoin par la suite. Donc, il suffit de copier/coller 4 fois et être fait :) –