2016-06-23 4 views
0

Je ne suis pas vraiment sûr s'il y a une telle fonctionnalité en C++, et s'il y a je ne peux pas sembler le faire fonctionner, ainsi j'ai décidé de demander. Puis-je avoir un paramètre non-type de modèle de modèle. Quelque chose comme ceci:Paramètre non-type de modèle de modèle

template<template<int> class A, int num> 
class C 
{ 
private: 
    A<num> obj; 
}; 

Mon problème principal est que je veux avoir une classe C qui accepte 2 classes comme paramètres de modèle. Ces deux classes se spécialisent sur un paramètre non-type - disons A < 5>, B < 5> et je veux les passer à la classe C qui accepte deux classes comme paramètres de modèle. Je dois m'assurer cependant que ces deux classes se spécialisent sur le même paramètre non-type - par exemple A < 3>, B < 4> ne devrait pas être autorisé en tant qu'arguments à la classe C.

+2

Oui c'est possible – Jarod42

Répondre

1

Vous pouvez simplifier votre code avec un « makeC »:

#include <iostream> 

template <template<int> class A, template<int> class B, int N> 
class C { 
    A<N> a; 
    B<N> b; 
}; 

using namespace std; 

template <template<int> class A, template<int> class B, int N> 
C<A,B,N> makeC(A<N> a, B<N> b) { 
    return C<A, B, N>{}; 
} 

template<int N> 
class AImpl { 

}; 

template<int N> 
class BImpl { 

}; 


int main() { 
    auto c = makeC(AImpl<2>{}, BImpl<2>{}); 
    //auto error = makeC(AImpl<1>{}, BImpl<2>{}); 

    return 0; 
} 
+0

Dites que la classe AImpl prend plus d'arguments de modèle par exemple , est-il possible de masquer le paramètre de classe de modèle de la classe C? Quelque chose comme AImpl <5> (fondamentalement la classe C n'a pas besoin de savoir aboutSomeClass mais doit connaître environ 5. – lightxbulb

+0

Est-ce que SomeClass doit être identique entre A et B? – Arkadiy

+0

Pas vraiment, je veux juste le cacher de la classe C. Fondamentalement plutôt que d'avoir 'template