Является ли _1 частью C ++ 0x? - PullRequest
       10

Является ли _1 частью C ++ 0x?

12 голосов
/ 24 октября 2010

Я видел два последних ответа с использованием _1 в качестве чистого решения C ++ 0x (без явного упоминания о лямбдах-бустах).

Есть ли такое животное, как std::_1 Я бы подумал, что наличие родной лямбды сделает такую ​​конструкцию излишней.

Поиск по коду Google для std::_1 приносит два результата из одного и того же проекта, так что это неокончательно.

Ответы [ 3 ]

13 голосов
/ 24 октября 2010

Да, они являются частью C ++ 0x внутри пространства имен std::placeholders, из последней версии (n3126) §20.8.10.1.3 «Заполнители»:

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

Они на самом деле включены в TR1 ( n1836 §3.6.4; n1455 ) вместе с bind, которые взяты из Библиотека Boost.Bind .

5 голосов
/ 24 октября 2010

Да, они являются частью C ++ 0x.Я не проверил дважды спецификации TR1, но я подозреваю, что они были добавлены туда (TR1 был, по сути, расширением только для библиотеки C ++ 03, поэтому он не мог полагаться на лямбды), а затем, поскольку он уже естьв TR1 было бы излишне разрушительным удалить его снова в C ++ 0x, даже если это больше не нужно, если у вас есть настоящие лямбды.

5 голосов
/ 24 октября 2010

Очевидно, что они являются частью C ++ 0x и должны быть определены в заголовке <functional> в соответствующем компиляторе, см. Следующий FAQ:

C ++ 0x FAQ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...