Biblioteka boostów i wygląda na zbliżający się standard C++ 0x, definiuje różne szablony cech typów w celu rozróżnienia między obiektami, które mają trywialne konstruktory, konstruktorów kopiowania, przydziałów lub destruktorów, a obiektami, które nie są używane. t. Jednym z najważniejszych zastosowań tego jest optymalizacja algorytmów dla niektórych typów, np. za pomocą memcpy.C++: has_trivial_X - cechy typu
Ale nie rozumiem prawdziwej praktycznej różnicy między różnymi szablonami has_trivial_X. Standard C++ definiuje tylko dwie szerokie kategorie typów, które nas dotyczą: POD i non-POD. Typ nie jest POD, jeśli ma zdefiniowany konstruktor, konstruktor kopiowania, operator przypisania lub destruktor. Innymi słowy, wszystko, co nie jest wbudowanym typem lub strukturą C wbudowanych typów, nie jest POD.
Jaki jest sens rozróżniania na przykład has_trivial_assign i has_trivial_constructor? Jeśli obiekt ma nietrywialnego operatora przypisania LUB nie jest trywialnym konstruktorem, nie jest to POD. Więc w jakich okolicznościach warto wiedzieć, że obiekt ma trywialny operator przypisania, ale nie jest trywialnym konstruktorem?
Innymi słowy, dlaczego nie zdefiniować pojedynczego szablonu cechy, is_pod<T>
, i być z nim zrobić?