Tenir compte de l'utilisation suivante des paramètres du modèle de modèle ...Comment déclarer/définir une classe avec des paramètres de modèle de modèle sans l'aide d'un paramètre de modèle supplémentaire
#include <iostream>
template <typename X>
class A
{
X _t;
public:
A(X t)
:_t(t)
{
}
X GetValue()
{
return _t;
}
};
template <typename T, template <typename T> class C >
class B
{
C<T> _c;
public:
B(T t)
:_c(t)
{
}
T GetValue()
{
return _c.GetValue();
}
};
using namespace std;
int main()
{
B<int, A> b(10);
cout<<b.GetValue();
return 0;
}
est-il un moyen par lequel le T des paramètres du modèle peut être enlevé? Par exemple, y a-t-il un moyen de faire le travail suivant?
//Does not compile
template <template <typename T> class C >
class B
{
C _c;
public:
B(T t)
:_c(t)
{
}
T GetValue()
{
return _c.GetValue();
}
};
int main()
{
B< A<int> > b(10);
cout<<b.GetValue();
return 0;
}
Merci pour la réponse, mais j'ai finalement découvert cela moi-même. J'étais en train d'éditer la question et de poster mon travail mais apparemment j'étais venu au bon endroit pour poser cette question! –
notez que la réponse de Sunlight est meilleure que la mienne, puisqu'il a compris ce que vous voulez. Pas besoin de se rétablir comme je vous l'ai montré.Cela ne serait nécessaire que si vous utilisez A, mais que vous avez parfois besoin d'un A . Ou si la vue de l'utilisateur est A , mais que vous utilisez A . –
+1! Je cherchais un moyen de recevoir une référence à n'importe quel conteneur standard, et utiliser ainsi le type 'C :: value_type' était vraiment utile. Merci! – Vargas