J'ai besoin d'un template C++ qui, donné un type et un objet de ce type, peut prendre une décision selon que le type est un entier ou pas, tout en pouvant accéder aux objets réels. J'ai essayé ceciProblème de spécialisation de template C++
template <typename T, T &N>
struct C {
enum { Value = 0 };
};
template <int &N>
struct C<int, N> {
enum { Value = N };
};
mais cela ne fonctionne pas. Y a-t-il un moyen de réaliser quelque chose de similaire?
Modifier
Ce que je cherchais à atteindre était quelque chose comme ça, que se passerait-il au moment de la compilation:
if (type is int) {
return IntWrapper<int_value>
else {
return type
}
Vous pouvez passer en fait des pointeurs ou des références à des objets dans un instanciation de modèle, comme si:
struct X {
static const int Value = 5;
};
template <X *x>
struct C {
static const int Value = (*x).Value;
};
X x;
std::cout << C<&x>::Value << std::endl; // prints 5
mais apparemment tout cela accomplit est d'initialiser le modèle par infer Le type x
et le x
doivent également être déclarés globalement. Pas d'utilité pour ce que j'essaie de faire, ce que je pense n'est pas possible après tout au moment de la compilation.
Il semble que vous ayez besoin d'un modèle de fonction, car les modèles de classe requièrent que vous spécifiiez explicitement les arguments de type de modèle. Pourriez-vous poster un exemple d'utilisation pour clarifier ce que vous essayez de faire? –
@j_random_hacker: Vous pouvez laisser le modèle vierge et avoir une classe spécialisée ... vous n'avez pas besoin de spécifier un type de modèle. – Partial