Policy-based design



  • Wer kann mir Hinweise geben, was es mit
    "Policy-based design" auf sich hat?

    Findet das Anwendung oder ist es eher ein theoretisches Konstrukt?

    template <typename OutputPolicy, typename LanguagePolicy>
    class HelloWorld : private OutputPolicy, private LanguagePolicy
    {
        using OutputPolicy::print;
        using LanguagePolicy::message;
    }
    


  • Hi!

    Eine typische Policy (so wie ich sie verstehen möchte) ist ein Allokator. Mit Policies beinflusst man das Verhalten von Klassen, man injeziert sozusagen ein Verhalten in eine Klasse (z.B. std::allocator::allocate() bestimmt, wie Speicher angefordert werden soll). Das Gegenstück dazu sind Traits. Mithilfe von Traits kann man z.B. bestimmte Funktionen aus einem Typ herauslesen (man denke z.B. an std::char_traits<char>::eof(), was dir den EOF-Wert eines char-Typen gibt).

    Nützlich ist die Kombination aus beidem: in der Stdlib findet man das wiederum z.B. bei Allokatoren: Man gibt zwar einen Allokator als Policy-Typ an, intern wird aber nicht der Allokator-Typ benutzt, sondern std::allocator_traits<Allocator>. Auf diese Weise ist man nicht gezwungen, alle Schnittstellen eines Allokators zu definieren. Wenn welche fehlen, werden sie durch ein Standardverhalten ersetzt.


Anmelden zum Antworten