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)?
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.
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.
Tags und Links c++ visual-c++ memcpy typetraits memcmp