De repente, en this article ("problem 2") Veo una afirmación de que C++ Standard prohíbe el uso de contenedores STL para almacenar elemants de clase si esa clase tiene una sobrecarga operator&()
.¿Por qué el operador de sobrecarga y() está prohibido para las clases almacenadas en contenedores STL?
Después de haber sobrecargado operator&()
can indeed be problematic, pero se parece a un defecto "dirección de" operador puede ser utilizado fácilmente por a set of dirty-looking casts that are used in boost::addressof()
y se cree que son portátiles y estándar-compilant.
¿Por qué está sobrecargado operator&()
prohibido para las clases almacenadas en contenedores STL mientras existe la solución boost::addressof()
?
Por curiosidad (sin crítica, realmente solo curiosidad), ¿dónde sobrecargarías el operador de dirección? – falstro
@roe: en clases como ATL :: CComPtr (http://msdn.microsoft.com/en-us/library/ezzw7k98(VS.80).aspx) que hace sentido. A menudo los usa en lugar de punteros crudos.Desea que las llamadas funcionen como 'HRESULT GetStuff (IInterface **)' en CComPtr y que requiera un método para recuperar la dirección del puntero encapsulado o del operador sobrecargado &() '. –
sharptooth
Después de un rápido recorrido al capítulo sobre contenedores en el estándar, no he encontrado tal reclamo. Descargo de responsabilidad: Acabo de hojear, me podría haber perdido si no estaba en negrita y/o al principio de la oración :) –