2010-10-24 12 views
12

He visto two reciente answers usando _1 como una solución C++ 0x pura (sin mención explícita de boost lambdas).¿Es _1 parte de C++ 0x?

¿Hay un animal como std::_1? Creo que tener lambdas nativos hará que tal construcción sea redundante.

Una búsqueda de código de Google para std::_1 trae two results del mismo proyecto, por lo que no es concluyente.

+0

¿crees que estarían en namespace std? En boost están en el espacio de nombres global ... –

+2

[MSDN] (http://msdn.microsoft.com/en-us/library/bb982158.aspx) tiene '_1' en un espacio de nombres' std :: placeholders' y ambas respuestas vinculadas se refieren a eso también. Esto tampoco es concluyente, pero si nada más puedes estar buscando algo incorrecto. –

+0

Oh, acabo de descubrir que están en [TR1] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf) –

Respuesta

13

sí, son parte de C++ 0x dentro de la std::placeholders espacio de nombres, desde el último borrador (n3126) §20.8.10.1.3 "marcadores de posición":

namespace std { 
    namespace placeholders { 
     // M is the implementation-defined number of placeholders 
     extern unspecified _1; 
     extern unspecified _2; 
     . 
     . 
     . 
     extern unspecified _M; 
    } 
} 

en realidad son included in TR1 (n1836 §3.6.4; n1455) junto con bind, que están tomados del Boost.Bind library.

5

Al parecer son parte de C++ 0x y debe definirse en la cabecera <functional> en un compilador conformes, ver el siguiente FAQ:

C++ 0x FAQ

5

Sí, son parte de C++ 0x. No he verificado dos veces las especificaciones TR1, pero sospecho que se agregaron allí (TR1 era esencialmente una extensión de solo biblioteca para C++ 03, por lo que no podía confiar en lambdas), y luego, como ya está allí en TR1, sería innecesariamente disruptivo eliminarlo nuevamente en C++ 0x, aunque ya no sea realmente necesario una vez que tengas las lambdas verdaderas.

+1

Los marcadores de posición siguen siendo necesarios ya que C++ 0x lambdas no son polimórficos. – usta

+0

Están en . Fueron añadidos con bind y otras cosas. – emsr