2010-10-24 6 views
12

J'ai vu two récente answers en utilisant _1 comme une solution pure C++ 0x (pas de mention explicite de boost lambdas).Est-ce que _1 fait partie de C++ 0x?

Y a-t-il un animal tel que std::_1? Je pense que le fait d'avoir des lambdas natifs rendra une telle construction redondante.

Une recherche de code Google pour std::_1 apporte two results à partir du même projet, ce qui n'est pas concluant.

+0

En boost, ils sont dans l'espace de noms global ... –

+2

[MSDN] (http://msdn.microsoft.com/en-us/library/bb982158.aspx) a '_1' dans un espace de noms' std :: placeholders' et les deux réponses liées s'y réfèrent également. Ce n'est pas concluant non plus, mais si rien d'autre vous cherchez peut-être la mauvaise chose. –

+0

Oh, je viens de trouver qu'ils sont dans [TR1] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf) –

Répondre

13

Oui, ils font partie de C++ 0x à l'intérieur du espace de noms std::placeholders, du dernier projet (n3126) §20.8.10.1.3 "Placeholders":

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

Ils sont en fait included in TR1 (n1836 §3.6.4; n1455) avec bind, qui proviennent du Boost.Bind library.

5

Apparemment, ils font partie de C++ 0x et doivent être définis dans l'en-tête <functional> dans un compilateur conforme, consultez la FAQ suivante:

C++ 0x FAQ

5

Oui, ils font partie de C++ 0x. Je n'ai pas revérifié les spécifications TR1, mais je soupçonne qu'ils ont été ajoutés là (TR1 était essentiellement une extension de C++ 03 uniquement pour la bibliothèque, donc il ne pouvait pas compter sur lambdas), et puis, puisqu'il est déjà là dans TR1, il serait inutilement perturbateur de le supprimer à nouveau en C++ 0x, même si ce n'est plus vraiment nécessaire une fois que vous avez de vrais lambdas. Pensez-vous qu'ils seraient dans l'espace de noms std?

+1

Les espaces réservés sont toujours nécessaires en C++ 0x Les lambdas ne sont pas polymorphes. – usta

+0

Ils sont dans . Ils ont été ajoutés avec bind et d'autres choses. – emsr