¿Cómo comprobar si el tipo de C++ es copiable trivialmente? Tengo una clase, que utiliza las funciones memcpy y memcmp con la plantilla especificada tipo T y me gustaría disparar afirmar para los tipos, que no son seguros para copiar con memcpy. ¿Hay alguna manera de hacer eso (con el estándar existente)?C++ is_trivially_copyable check
Respuesta
No, no es posible en C++ 98/C++ 03. Cosas como esta son las razones por las que <type_traits>
se agregó a C++ 0x. Algunas de las características de <type_traits>
se pueden implementar en C++ 03, a menudo utilizando el principio SFINAE, pero varias, incluida std::is_trivially_copyable<T>
, simplemente requerirán soporte de compilador incorporado.
Sí, esa también fue mi impresión. Gracias. – axe
Lo más parecido es boost::is_pod<>.
Sin embargo, no "solo funciona" para los tipos de clase. – ThomasMcLeod
Existen características de tipo disponibles para esto en boost.
Sin embargo, está perdiendo el tiempo, recordar que un tipo no va a ser más rápido que lo que su optimizador producirá con un constructor de copia si el tipo es copiable trivialmente. Solo usa el constructor de copia.
Buen punto. (más caracteres) – aschepler
¿Qué rasgos de tipo? is_pod no es exactamente lo que estoy buscando, ya que Maxim señaló que es casi lo mismo. – axe
_Sin embargo, está desperdiciando su tiempo, recordar que un tipo no va a ser más rápido que lo que su optimizador producirá con un constructor de copia si el tipo es trivialmente copiable. Simplemente use el constructor de copia. No es para el rendimiento, simplemente no quiero que mi clase trabaje para tipos con un constructor de copia no trivial. Podría especializarlo para todos los tipos integrales, sin embargo, entonces no funcionará para POD. – axe
- 1. C# ToDictionary con ContainsKey check
- 2. spamassassin check score C# code
- 3. ACL Check/Management en C#
- 4. android radiobutton check after clearing check issue
- 5. ¿Qué hace "make check"?
- 6. DeviceOrientation Check en AppDelegate
- 7. git hook sintaxis check
- 8. check isatty in bash
- 9. Clojure not nil check
- 10. JQuery Check Input File
- 11. PHP Check Process ID
- 12. PHP check file extension
- 13. drupal check api checkboxes
- 14. Javascript check browser
- 15. bash check mysql connect
- 16. powershell check sharepoint URLs
- 17. Proxy Check en python
- 18. .NET Spell Check control?
- 19. WP7 Policy Check
- 20. iPhone UIScrollView Speed Check
- 21. Java ParseInt Sanity Check
- 22. fclose return value check
- 23. $ null check in velocity
- 24. C# winform check si el control es físicamente visible
- 25. C# Events and Lambdas, alternative to null check?
- 26. Visual Studio 08 Spell Check Addin?
- 27. Maven Checkstyle: Check not working
- 28. check POST request with Fiddler
- 29. GWT CellTable programmatically check CheckCellCell
- 30. restricción CHECK en múltiples columnas
Puede usar el rasgo de tipo 'is_pod'. ¿Cuál es su definición de "seguro para copiar con' memcpy' "? Si un objeto tiene un miembro de datos de puntero que apunta a un objeto propio asignado dinámicamente, ¿es seguro "copiar con' memcpy' "? –
@James: la definición es, constructor de copia trivial, es decir, el tipo no tiene un constructor de copia definido por el usuario, ni ninguna clase base o miembro de datos con tal. – Puppy
La definición del estándar "Una clase trivially copyable es una clase que: - no tiene constructores de copia no triviales (12.8), - no tiene operadores de asignación de copia no triviales (13.5.3, 12.8), - tiene destructor trivial (12.4) ". – axe