J'ai une méthode et deux classes définies comme suit:Réduction du nombre d'arguments de modèle pour la classe
template<template<class X> class T>
void doSomething()
{
T<int> x;
}
template <class T>
class ClassWithOneArg
{
T t;
};
template <class T1, class T2>
class ClassWithTwoArgs
{
T1 t1;
T2 t2;
};
Je peux maintenant
doSomething<ClassWithOneArg>();
mais je ne peux pas
doSomething<ClassWithTwoArgs>();
Cependant, J'aimerais passer ClassWithTwoArgs à doSomething, où T2 = double.
La seule méthode que je trouve est de créer
template <class T1>
class ClassWithTwoArgs_Child
: public ClassWithTwoArgs<T1, double>
{
};
puis
doSomething<ClassWithTwoArgs_Child>();
Cela fonctionne, mais dans mon cas concret toutes les classes exigent un argument du constructeur et donc je dois créer un constructeur avec cet argument également dans la classe _Child et le passer à la base que je veux vraiment éviter.
Avez-vous une idée de comment faire cela?
Merci beaucoup!
Notez le commentaire de Philip (j'ai peur que ce n'est pas ce que je cherche, car il pourrait y avoir d'autres cas où j'aimerais aussi passer "ClassWithTwoArgs ".). Cette solution ne fonctionnera pas car le 'double' est codé en dur –
Chubsdad
@chubsdad, bien sûr, vous pouvez paramétrer la fonction méta. Découvrez comment j'ai transformé mf2 en un modèle lui-même et comment il est utilisé. – sellibitze
merci, cela a résolu ma question! Ce n'est pas un problème de changer "doSomething" mais je ne voulais pas avoir à définir le Template-Argument ("int" dans mon exemple) de l'extérieur de "doSomething". – Philipp