2010-10-24 14 views
12

Ho visto two recente answers utilizzando _1 come una pura soluzione C++ 0x (nessuna menzione esplicita di boost lambda)._1 parte di C++ 0x?

Esiste un animale come std::_1. Penso che avere un lambda nativo renderà ridondante tale costrutto.

Una ricerca di codice Google per std::_1 porta lo two results dallo stesso progetto, quindi è inconcludente.

+0

pensi che sarebbero nello spazio dei nomi std? In boost sono nel namespace globale ... –

+2

[MSDN] (http://msdn.microsoft.com/en-us/library/bb982158.aspx) ha '_1' in uno spazio dei nomi' std :: placeholders' e entrambe le risposte collegate si riferiscono anche a questo. Anche questo non è conclusivo, ma se non altro potresti cercare la cosa sbagliata. –

+0

Oh, abbiamo appena scoperto che sono in [TR1] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf) –

risposta

13

Sì, sono parte di C++ 0x all'interno del std::placeholders spazio dei nomi, dal più recente progetto (n3126) §20.8.10.1.3 "segnaposto":

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

Essi sono in realtà included in TR1 (n1836 §3.6.4; n1455) insieme a bind, che sono presi dallo Boost.Bind library.

5

A quanto pare sono parte di C++ 0x e dovrebbero essere definiti nell'intestazione <functional> in un compilatore conforme, vedere il seguente FAQ:

C++ 0x FAQ

5

Sì, fanno parte di C++ 0x. Non ho ricontrollato le specifiche TR1, ma sospetto che siano state aggiunte lì (TR1 era essenzialmente un'estensione di sola libreria di C++ 03, quindi non poteva fare affidamento su lambdas), e quindi, dato che è già lì in TR1, sarebbe inutilmente distruttivo rimuoverlo di nuovo in C++ 0x, anche se non è più necessario una volta che si hanno veri lambda.

+1

I segnaposto sono ancora necessari come C++ 0x lambda non sono polimorfici. – usta

+0

Sono in . Sono stati aggiunti con legatura e altre cose. – emsr