Есть ли важные различия, которые нужно знать между boost::function и std::tr1::function
Я много использую Boost в своем коде, но пока воздерживаюсь от использования std::tr1
, Теперь мне нужен более сложный указатель на функцию, которую могут предоставить эти два объекта. К сожалению, C+11 пока не вариант. Я прочитал это boost::function
может быть сложно с определенными компиляторами, например (Visual Studio до 7.1 требует специального переносимого синтаксиса), но не нашел никакой информации о std::tr1::function
по этому вопросу. Есть ли важные различия в использовании памяти, скорости и совместимости между ними?
Редактировать: в настоящее время я использую gcc 4.7, но код должен также компилироваться в Visual Studio и желательно также с более устаревшими версиями, такими как 2005
1 ответ
Что ты прочитал? Что вы подразумеваете под хитрым? Вы имеете в виду некоторые древние компиляторы, поддерживающие только boost::function1<void, int>
форма, а не boost::function<void(int)>
форме?
std::tr1::function
должен быть предоставлен вашим компилятором, так что если ваш компилятор предоставляет его вообще, то он должен работать отлично, и не быть хитрым (что бы вы ни подразумевали под этим).
Спрашивать, есть ли различия между конкретной реализацией Boost и спецификацией интерфейса, которая не является реализацией, не имеет смысла. Одна реализация может быть похожа на Boost и не иметь существенных различий, а другая реализация может быть совершенно другой. ССЗ std::tr1::function
был предоставлен автором Boost.Function, поэтому он очень похож.