traditionell können statische Arrays in C zur Kompilierzeit mit fester Fixierung definiert werden. Größenarrays. Für bestimmte Szenarien kann es jedoch wünschenswert sein, Werte zur Kompilierung programmgesteuert zuzuweisen. In diesem Artikel werden Metaprogrammierungstechniken untersucht, um eine solche dynamische Erstellung statischer Arrays zu erreichen.
Mithilfe von C 0x -Funktionen können lokale oder Mitglieds -Arrays von Vorlagen aus einem initialisiert werden Variadische Vorlagenargumentliste. Diese Problemumgehung hat Einschränkungen aufgrund einer maximalen Instanziierungstiefe der maximalen Vorlage.
, um Werte zum Kompilieren zuzuweisen, kann eine Kombination von variadischen Vorlagen und Metafunktionen verwendet werden. Die Metafunc -Vorlage dient als Parameterpaket, die eine Sequenz von Werten basierend auf ihrem Index erzeugt. Eine Generate_Array -Vorlage kann dann ein Array der gewünschten Größe unter Verwendung der generierten Werte erstellen. };
Vorlage
templatestruct MetaFunc { enum { value = index 1 }; }; template class F> struct generate_array { typedef typename generate_array_impl ::result result; }; template class F, unsigned... args> struct generate_array_impl { typedef typename generate_array_impl ::value, args...>::result result; }; template class F, unsigned... args> struct generate_array_impl::value, args...> result; }; template<unsigned... args> struct ArrayHolder { static const unsigned data[sizeof...(args)]; }; template<unsigned... args> const unsigned ArrayHolder<args...>::data[sizeof...(args)] = { args... };
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3