Inspiré par ce post https://stackoverflow.com/a/6730362 J'essaie de créer une séquence de compilation de types (intégrales) similaires qui peuvent être stockés dans la mémoire ROM uniquement en utilisant la métaprogrammation de modèle. L'idée est de définir un tableau en ajoutant progressivement des éléments ligne par ligne en utilisant le schéma variadique du modèle metaprogrammingcréer des tableaux de façon incrémentielle au moment de la compilation
Actuellement, je suis ici:
template<typename T, T... values> struct Seq
{
static const T value[sizeof...(values)];
static const uint16 n;
};
template<typename T, T... values> const T Seq<T, values...>::value[] = { values };
template<typename T, T... values> const uint16 Seq<T, values...>::n = sizeof...(values);
template<sint32 idx, typename T, T... values> struct IncSeq;
template<sint32 idx, typename T, T... values> struct IncSeq<-1, T, values...> : Seq<T, values...> {};
Je suis assez nouveau modèle métaprogrammation. Je n'ai donc aucune idée de ce que je fais ici. Mais le compilateur VS se plaint de quelques problèmes de spécialisation partielle:
'idx' : template parameter not used or deducible in partial specialization 'IncSeq<-1,T,values...>'
Pouvez-vous m'aider ici? Pourquoi n'est-il pas déductible? J'ai écrit '-1'! L'idée ovedrall est d'avoir une variable d'index décrémentée pendant chaque appel jusqu'à ce que -1 soit atteint, ce qui fait que IncSeq hérite de Seq en utilisant les types fournis. Utilisation comme ceci:
template<sint32 idx, typename T, T... values> struct IncSeq<0, uint8, values...> : IncSeq<-1, uint8, 42, values..>{};
template<sint32 idx, typename T, T... values> struct IncSeq<1, uint8, values...> : IncSeq<0, uint8, 43, values..>{};
template<sint32 idx, typename T, T... values> struct IncSeq<2, uint8, values...> : IncSeq<1, uint8, 44, values..>{};
typedef IncSeq<2, uint8> myStaticArray;
Je sais que cela ressemble à beaucoup de hazzle, mais l'idée d'avoir un tableau dans la mémoire ROM en cours de construction ligne par ligne dans le code source peut présenter certains avantages pour certains d'entre nous.
testés. Travaux. Merci. – rava