Heim > Backend-Entwicklung > C++ > Können C 0x-Metaprogrammierungstechniken verwendet werden, um statischen Arrays zur Kompilierungszeit programmgesteuert Werte zuzuweisen?

Können C 0x-Metaprogrammierungstechniken verwendet werden, um statischen Arrays zur Kompilierungszeit programmgesteuert Werte zuzuweisen?

Linda Hamilton
Freigeben: 2024-12-05 06:09:10
Original
732 Leute haben es durchsucht

Can C  0x Metaprogramming Techniques be Used to Programmatically Assign Values to Static Arrays at Compile Time?

Programmgesteuertes Generieren statischer Arrays zur Kompilierungszeit in C

Angesichts der Möglichkeit, statische Arrays zur Kompilierungszeit in C zu definieren, ist dies möglich ihre Werte mithilfe von Metaprogrammierungstechniken programmatisch zuweisen?

Frage 1: Programmatische Zuweisung von Array-Werten

Ja, mit C 0x-Funktionen ist es möglich, Array-Elemente „programmgesteuert“ zur Kompilierungszeit zu initialisieren. Betrachten Sie das folgende Beispiel:

template<unsigned... args>
struct ArrayHolder {
    static const unsigned data[sizeof...(args)];
};

template<unsigned... args>
const unsigned ArrayHolder<args...>::data[sizeof...(args)] = { args... };
Nach dem Login kopieren

Frage 2: Selektive Zuweisung von Array-Werten

Angenommen, das Array enthält mit einigen Ausnahmen wiederkehrende Werte, ist eine selektive Zuweisung möglich Werte programmgesteuert:

template<size_t N, template<size_t> class F, unsigned... args>
struct generate_array_impl {
    typedef typename generate_array_impl<N-1, F, F<N>::value, args...>::result result;
};

template<template<size_t> class F, unsigned... args>
struct generate_array_impl<0, F, args...> {
    typedef ArrayHolder<F<0>::value, args...> result;
};

template<size_t N, template<size_t> class F>
struct generate_array {
    typedef typename generate_array_impl<N-1, F>::result result;
};
Nach dem Login kopieren

Verwendung für das Array mit wiederkehrenden Nullen außer für Elemente 2 und 3:

template<size_t index>
struct MetaFunc {
    enum { value = index == 2 || index == 3 ? index + 1 : 0 };
};

void test() {
    const size_t count = 7;
    typedef generate_array<count, MetaFunc>::result A;

    for (size_t i=0; i<count; ++i)
        std::cout << A::data[i] << "\n";
}
Nach dem Login kopieren

Obwohl diese Lösungen durch die maximale Instanziierungstiefe der Vorlage begrenzt sind, demonstrieren sie das Potenzial von C 0x für die programmgesteuerte Array-Erstellung und -Initialisierung.

Das obige ist der detaillierte Inhalt vonKönnen C 0x-Metaprogrammierungstechniken verwendet werden, um statischen Arrays zur Kompilierungszeit programmgesteuert Werte zuzuweisen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage