1 - std::bind
- стандартное название для него. Это будет имя, которое вы используете для C ++ 11-совместимых библиотек. Список всех библиотек в стандартизированном C ++ .
2 - std::tr1::bind
- пространство имен Технического отчета C ++ 1. Между C ++ 03 и C ++ 11 существовал Технический отчет C ++ 1 , в котором предлагались дополнительные библиотеки и улучшения. Большинство из них уже существовали в Boost в то время, и некоторые из этих изменений библиотеки были приняты в стандарте C ++ 11, например <regex>
и <functional>
(который содержит std::bind
). Пространство имен std::tr1
использовалось для различения библиотек в их текущем состоянии, в отличие от всего, что стандартизировано в пространстве имен std
.
3 - boost::bind
предназначен для bind
в пространстве имен boost
, если вы используете библиотеку Boost . Boost включает в себя гораздо больше, чем то, что есть в TR1 и что я в стандартной библиотеке C ++ 11. Список всех библиотек в Boost по состоянию на 1.52.0
Большая часть того, что было в TR1, было стандартизировано и находится в пространстве имен C ++ 11 std
, а C ++ 11 содержит больше библиотек, чем упомянуто в TR1, которые были адаптированы из конструкций Boost, например поддержка потоков, определенная в <thread>
.
Часть того, что определяет, что вы можете использовать и какое пространство имен вы можете использовать сейчас, зависит от вашего компилятора. Я не помню, но я думаю, что более поздние реализации GCC-g ++ начали использовать пространства имен std
для новых библиотек C ++ 11, но для их активации может потребоваться другой флаг компилятора. Они по-прежнему будут поддерживать пространство имен std::tr1
. Visual C ++ 2010 переместил то, что было ранее в std::tr1
, в обычное пространство имен std
, но Visual C ++ 2008 все еще использовал std::tr1
.