4
Je cherche à écrire un programme qui génère 1 à 1000 sans une boucle ou un appel de fonction récursive, et je viens avec ceSpécialiser une classe de modèle?
#include <iostream>
template <int N>
class NumberGenerator : public NumberGenerator<N-1>{
public:
NumberGenerator();
};
template <int N>
NumberGenerator<N>::NumberGenerator(){
// Let it implicitly call NumberGenerator<N-1>::NumberGenerator()
std::cout << N << std::endl;
}
template <>
NumberGenerator<1>::NumberGenerator(){
// How do I stop the implicit call?
std::cout << 1 << std::endl;
}
int main(){
NumberGenerator<1000> a; // Automatically calls the constructor
return 0;
}
Le problème est, je ne peux pas arrêter l'appel de la chaîne (NumberGenerator<1>
encore tente d'appeler NumberGenerator<0>
et de déborder à l'infini). Comment puis-je faire arrêter la chaîne à 1?
Vais-je être en mesure d'utiliser d'autres fonctions de la classe 'NG pas spécialisées <1>'? C'est à dire. fait 'vide NG :: foo()' couverture 'NG <1>'? –
iBug
Erm. J'espère que cela t'aides? http://coliru.stacked-crooked.com/a/dabc1b56b56e3848 – sehe
Non, vous ne serez pas en mesure d'utiliser les autres fonctions. Pour arrêter la chaîne, vous DEVEZ supprimer la classe de base. Il n'y a pas moyen de contourner cela 1. programmation de méta de modèle (bonne chance) 2. spécialisant le modèle de classe – sehe