C ++ is_trivial_copyable check

8

Wie überprüft man, ob der C ++ Typ trivial kopierbar ist? Ich habe eine Klasse, die memcpy- und memcmp-Funktionen mit dem angegebenen Vorlagentyp T verwendet, und ich möchte Assert für Typen ausgeben, die nicht sicher mit memcpy kopiert werden können. Gibt es eine Möglichkeit (mit vorhandenem Standard)?

    
axe 14.02.2011, 16:11
quelle

3 Antworten

8

Nein, in C ++ 98 / C ++ 03 nicht möglich. Dies ist der Grund, warum <type_traits> zu C ++ 0x hinzugefügt wurde. Einige der Funktionen von <type_traits> können in C ++ 03 implementiert werden, oft unter Verwendung des SFINAE-Prinzips, aber einige, einschließlich std::is_trivially_copyable<T> , erfordern einfach eine integrierte Compiler-Unterstützung.

    
aschepler 14.02.2011, 16:17
quelle
6

Dafür sind in Boost Typenmerkmale verfügbar.

Sie verschwenden jedoch Ihre Zeit - das Speichern eines Typs ist nicht schneller als das, was Ihr Optimierer mit einem Kopierkonstruktor erzeugt, wenn der Typ trivial kopierbar ist. Verwenden Sie einfach den Kopierkonstruktor.

    
Puppy 14.02.2011 16:15
quelle
4

Am nächsten kommt boost :: is_pod & lt; & gt; .

    
Maxim Egorushkin 14.02.2011 16:14
quelle