Как использовать tr1 с Visual Studio 2010 (tr1::function)?
Как начать использовать возможности tr1 Visual Studio 2010? Для более конкретного случая мне требуется функция std:: tr1::. Я пытался в том числе #include <tr1/functional>
который сообщает как отсутствующий, в то время как #include <functional>
включает в себя нормально, но когда я установил это:
std::tr1::function<void(void)> callback;
Я получил:
1>d:\marmalade\projects\core\src\button.h(21): error C3083: 'tr1': the symbol to the left of a '::' must be a type
1>d:\marmalade\projects\core\src\button.h(21): error C2039: 'function' : is not a member of '_STL'
1>d:\marmalade\projects\core\src\button.h(21): error C2143: syntax error : missing ';' before '<'
1>d:\marmalade\projects\core\src\button.h(21): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\marmalade\projects\core\src\button.h(21): error C2238: unexpected token(s) preceding ';'
Если я использую boost, он работает нормально, но для этого проекта из-за использования конкретной инфраструктуры мне потребуется версия Visual Studio tr1.
Как и предполагалось, пропуск tr1 все равно возвращает тот же результат:
std::function<void(void)> callback;
1>d:\marmalade\projects\core\src\button.h(20): error C2039: 'function' : is not a member of '_STL'
1>d:\marmalade\projects\core\src\button.h(20): error C2143: syntax error : missing ';' before '<'
1>d:\marmalade\projects\core\src\button.h(20): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\marmalade\projects\core\src\button.h(20): error C2238: unexpected token(s) preceding ';'
2 ответа
Основываясь на ваших комментариях и на этой странице, я думаю, что Marmalade поставляется с собственной реализацией STL, которая выглядит устаревшей. На этой странице подтверждается, что они используют версию STLPort, которая не поддерживает TR1, выпущенный в 2005 году, и тем более ничего более нового. Ваши варианты:
1) Скопируйте / напишите их сами
2) Обойтись без
3) Загрузите более новую версию STLPort. Похоже, что он не обновлялся за последние два года, поэтому нет C++11, но они упоминают о functional
, но не ясно, если это в std
или же std::tr1
Пространство имен. Однако это может не сработать с мармеладом, поэтому делайте резервные копии и будьте осторожны.
Visual Studio 2010 поставляется с C++11, включенным по умолчанию (или хотя бы тем, что реализовано). Вам нужно использовать std::function<void(void)>
,
Для полной таблицы смотрите здесь.
В качестве отступления: в настоящее время вы не должны использовать что-либо из TR1. Он был интегрирован в новый стандарт.