1 - std::bind
is the the standard name for it. This will be the name you use for C++11 compliant libraries. List of all libraries in standardized C++.
2 - std::tr1::bind
is C++ Technical Report 1 namespace. Between C++03 and C++11 there was the C++ Technical Report 1, which proposed additional libraries and enhancements. Most of these already existed in Boost at the time, and some of these library changes were adopted in the C++11 standard, like <regex>
and <functional>
(which contains std::bind
). The std::tr1
namespace was used to differentiate the libraries in their work-in-progress state, as opposed to everything standardized in the std
namespace.
3 - boost::bind
is for bind
in the boost
namespace, if you are using the Boost library. Boost encompasses much more than what is in TR1 and what i in C++11's std library. List of all libraries in Boost as of 1.52.0
Most of what was in TR1 has been standardized and is in the C++11 std
namespace, and C++11 contains more libraries than mentioned in TR1 that were adapted from Boost constructs, like threading support defined in <thread>
.
Part of what defines what you can use and which namespace you can use now depends on your compiler. I don't recall, but I think the more recent GCC-g++ implementations have started using std
namespaces for the new C++11 libraries, but might require a different compiler flag to activate that. They will still support the std::tr1
namespace though. Visual C++ 2010 moved what was previously in std::tr1
into the normal std
namespace, but Visual C++ 2008 still used std::tr1
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…