Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
Результаты опроса: Почему вы избегаете использовать С++11 ?
еще не дошел до изучения. 23 37.10%
а зачем мне оно? 13 20.97%
мой компилятор не поддерживает. 18 29.03%
а что это? оО 11 17.74%
Опрос с выбором нескольких вариантов ответа. Голосовавшие: 62. Вы ещё не голосовали в этом опросе

 
 
Рейтинг: Рейтинг темы: голосов - 81, средняя оценка - 4.65
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
#1

Почему вы избегаете использовать возможности С++11 ? - C++

13.01.2012, 12:08. Просмотров 10605. Ответов 123
Метки нет (Все метки)

всем привет.

сабж.

я-то, в полную использую. везде где только могу.
но частенько вижу вопросы типа: "а без использования С++0х нельзя?"
любопытна аргументация.

благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2012, 12:08     Почему вы избегаете использовать возможности С++11 ?
Посмотрите здесь:
Почему следует избегать явного приведения типов? (по возможности) C++
C++ Почему break нельзя использовать в if?
Почему не получается использовать bitset в VC++? C++
C++ Почему не рекомендуется использовать препроцессор?
C++ Почему clear необходимо использовать до seekg?
C++ Почему плохо использовать unsigned int?
C++ Почему не стоит использовать ^(XOR) в swap
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
Эксперт С++
15237 / 6869 / 1088
Регистрация: 02.05.2013
Сообщений: 11,246
Завершенные тесты: 1
25.07.2016, 13:49     Почему вы избегаете использовать возможности С++11 ? #81
Цитата Сообщение от hoggy Посмотреть сообщение
а вообще, не совсем понятно, в чем у вас проблема.
Проблема в том, что я не знаю, как собрать Boost в Visual C++ 2015 с XP-Toolset.
И нормальных решений в Гугле я не нашел. Всякие патчи бинарников, изменение
исходников Буста и т.п. не интересуют.

Цитата Сообщение от hoggy Посмотреть сообщение
прокидываем нужное окружение среды.
там ещё дефайн какой то нужно посетить.
для буста все аналогично.
Я был бы очень признателен, если бы хоть кто-нибудь описал четко
правильную последовательность действий. Лично для меня это бы
стало еще одним шагом в сторону C++11 и выше.
Fulcrum_013
661 / 729 / 72
Регистрация: 14.12.2014
Сообщений: 5,698
Завершенные тесты: 3
01.08.2016, 07:07     Почему вы избегаете использовать возможности С++11 ? #82
Цитата Сообщение от Nick Alte Посмотреть сообщение
Вот все эти 14-15 лет они их опасным нововведением и считают.
Шаблоны в С++ от рождения. Это один из двух плюсов. Второй из плюсов ООП. Может они ключевое слово class тоже опасным нововведением считают?

Добавлено через 40 минут
Из новомодных фич использую разве что nullptr. удобно. Лямбды использую только в случае острой необходимости, т.е работы с отставшими от жизни лет на 20 компиляторами не имеющими нативных делегатов. Что касается всего остального - то STL не пользую принципиально, а соответственно и все нововведения в ней тоже. Шаблоны тоже особо не наворачиваю, так что хватает и того что было раньше, тем более что шаблоны у меня разве что в инфраструктурной части. т.е. списки владения + набор списков обработки со слежением за жизненным циклом и состоянием содержимого. ну еще деревья такие же. Остальное математика, причем по определенным причинам вся в float без вариантов.
ну explicit еще пользую частенько.
и RAII для нестатик членов тоже удобнейшая штука.
А вот RTTI толкового не хватает. Имеется в виду не только и не столько получение имени полиморфного типа, а получение списка типов в т.ч. инстанционированных шаблонов,средства создания инстанса, информация о свойствах с адресами геттеров и сеттеров. Был бы во всю пользовал бы. (нехватает настолько что приходится сейчас пилить свой препроцессор который его изобразит)
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
01.08.2016, 07:59     Почему вы избегаете использовать возможности С++11 ? #83
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
работы с отставшими от жизни лет на 20 компиляторами не имеющими нативных делегатов
Это где?
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
ну explicit еще пользую частенько.
Не нововведение 11 стандарта.
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
и RAII для нестатик членов тоже удобнейшая штука.
Поясните, пожалуйста.
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А вот RTTI толкового не хватает. Имеется в виду не только и не столько получение имени полиморфного типа, а получение списка типов в т.ч. инстанционированных шаблонов,средства создания инстанса, информация о свойствах с адресами геттеров и сеттеров. Был бы во всю пользовал бы. (нехватает настолько что приходится сейчас пилить свой препроцессор который его изобразит)
Согласен, но это уже ближе к рефлексии, которую многие сильно ждут наряду с concepts и модулями.
Fulcrum_013
661 / 729 / 72
Регистрация: 14.12.2014
Сообщений: 5,698
Завершенные тесты: 3
01.08.2016, 08:24     Почему вы избегаете использовать возможности С++11 ? #84
Цитата Сообщение от silent_1991 Посмотреть сообщение
Это где?
Это по большому счету все окромя С++ Builder
Цитата Сообщение от silent_1991 Посмотреть сообщение
Поясните, пожалуйста.
C++
1
2
3
4
class foo{
       int bar=5;//вот так
 
}
Цитата Сообщение от silent_1991 Посмотреть сообщение
Согласен, но это уже ближе к рефлексии, которую многие сильно ждут наряду с concepts и модулями.
При этом она у всех есть уже 20 лет но только черти как и с доступом только из своего фреймверка который в комплекте.

Цитата Сообщение от silent_1991 Посмотреть сообщение
Не нововведение 11 стандарта.
для конструкторов с 98-го. А вот для опреаторов с 11-го.

Добавлено через 10 минут
Цитата Сообщение от silent_1991 Посмотреть сообщение
concepts и модулями
Лучше бы static if ввели бы (хотя это не так уж критично). а что касается модулей, то по большому счету в С++ каждая функция или класс является модулем. отмена #include и т.п. сделает систему раздельной компиляции гораздо менее удобной, а в нормальных компиляторах уже лет 20 существует #pragma link позволяющая в хидере указать что добавить в линковку.
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
01.08.2016, 08:36     Почему вы избегаете использовать возможности С++11 ? #85
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
При этом она у всех есть уже 20 лет но только черти как и с доступом только из своего фреймверка который в комплекте.
Ну само собой, пока поддержки в ядре языка не будет - будет она везде через одно место реализована...
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
для конструкторов с 98-го. А вот для опреаторов с 11-го.
Я и забыл про это... Согласен, чрезвычайно полезная штука, небольшой шажок к чуть более строгой типизации)

In-place инициализация полей тоже крутая вещь. Не понял только, почему вы её RAII обозвали)

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Это по большому счету все окромя С++ Builder
А вот здесь хочется всё же более развёрнутого ответа. О каких нативных делегатах речь?

Добавлено через 6 минут
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Лучше бы static if ввели бы
Если вы об этом, то ждем поддержку 17 стандарта компиляторами)

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
а что касается модулей, то по большому счету в С++ каждая функция или класс является модулем
Мне не очень понятно такое определение, но в любом случае, компилятору надо явно показать, где оно лежит из чего состоит внутри. Если в случае функции достаточно объявить её, а об остальном позаботится линкер, то в случае класса нужно его полное объявление, что зачастую влечёт собой выставление напоказ незначащих для пользователя деталей реализации вместе с интерфейсом класса. Попытка сокрытия этих деталей выливается в использование странных паттернов, которые не архитектуру позволяют улучшить, а просто являются костылями, которых бы не было, будь в языке нормальные модули.
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
отмена #include и т.п. сделает систему раздельной компиляции гораздо менее удобной
Вот уж не знаю, в Rust вон сделали модули, и всё очень удобно и прозрачно работает.
Voivoid
673 / 276 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
01.08.2016, 12:37     Почему вы избегаете использовать возможности С++11 ? #86
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
компиляторами не имеющими нативных делегатов
И как будет выглядеть в borland'е, ну например, передача компоратора в функцию сортировки?
Fulcrum_013
661 / 729 / 72
Регистрация: 14.12.2014
Сообщений: 5,698
Завершенные тесты: 3
01.08.2016, 18:37     Почему вы избегаете использовать возможности С++11 ? #87
Цитата Сообщение от Voivoid Посмотреть сообщение
И как будет выглядеть в borland'е, ну например, передача компоратора в функцию сортировки?
С просто функциями все точно так же, но и использование просто функций для параметризации в районе 0 при использовании концепии событийного программирования, в основном требуются обработчики событий . Имеются в виду указатели на методы объекта.
Ведь гораздо проще инициализировать делегата вот так:
C++
1
Event=Obj->Metod;
чем городить огород с лямбдой и замыканием.
Voivoid
673 / 276 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
01.08.2016, 18:44     Почему вы избегаете использовать возможности С++11 ? #88
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
С просто функциями все точно так же,
Так же, это как? Какой компаратор будет для сортировки int'ов? Какой компаратор будет для сортировки структуры по одному из полей? Для каждого из этих случаев писать функцию/метод?
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
01.08.2016, 19:18     Почему вы избегаете использовать возможности С++11 ? #89
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
чем городить огород с лямбдой и замыканием.
Как раз проще написать одноразовую лямбду прямо в том месте, где она нужна, чем описывать отдельную функцию/метод/класс-функтор - т.е. полноценную сущность, и использовать её лишь в одном-единственном месте.
Fulcrum_013
661 / 729 / 72
Регистрация: 14.12.2014
Сообщений: 5,698
Завершенные тесты: 3
01.08.2016, 19:36     Почему вы избегаете использовать возможности С++11 ? #90
Цитата Сообщение от silent_1991 Посмотреть сообщение
Как раз проще написать одноразовую лямбду прямо в том месте, где она нужна, чем описывать отдельную функцию/метод/класс-функтор - т.е. полноценную сущность, и использовать её лишь в одном-единственном месте.
Не в случае с делегатами-обработчиками событий.
C++
1
2
3
Event=[Obj](type1 arg1,type2 arg2)->rettype{return Obj->Method(Arg1,Arg2); } //так инициализируется делегат при 
помощи лямбды
Event=Obj->Method; // так инициализируется  делегат при нативной поддержке  компилятором, сигнатуру компилятор проверит compile time.
Т.е. нативная поодержка явно выигрывает по читабельности и краткости записи. Если есть еще и переназначение обработчиков, что при событийном программировании на каждом шагу, то лямбда-болото ведет к резкому снижению читабельности и многократному дублированию говнокода.
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
01.08.2016, 19:42     Почему вы избегаете использовать возможности С++11 ? #91
Fulcrum_013, стоп-стоп-стоп. Если у вас уже есть реализованный функтор (будь то функция, метод или объект с перегруженным оператором ()) - вы его точно так же можете передать в алгоритм или куда хотите. А вот если нет - тут-то и пригодятся лямбды. Именно для таких случаев они и нужны - чтобы не плодить одноразовые сущности. Определил, использовал, забыл. Не стоит быть столь категоричным.
Fulcrum_013
661 / 729 / 72
Регистрация: 14.12.2014
Сообщений: 5,698
Завершенные тесты: 3
01.08.2016, 19:55     Почему вы избегаете использовать возможности С++11 ? #92
Цитата Сообщение от silent_1991 Посмотреть сообщение
Именно для таких случаев они и нужны - чтобы не плодить одноразовые сущности. Определил, использовал, забыл. Не стоит быть столь категоричным.
Есть класс номер раз. Он имеет набор событий. Есть класс номер два три четыре пять и т.д.о которых классу номер раз вообще ничего не известно. Задача - привязать к событию метод из объектов классов два, три четыре пять, десять и т.д. с совпадением сигнатур. Именно это и позволяет сделать нативная поддержка делегатов, без всякого не относящегося к делу кода. присвоил обработчик и все. Компилятор сигнатуры проверил, и все ок. Если нативной поддержки нет то приходится лямбда-костыль использовать или при его отсутствии городить функторы вручную (во времена DOS так и делал). Т.е. с нативной поддержкой делегатов при присваивании указателя на метод объекта,получается компилятор определил использовал и забыл.
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
01.08.2016, 20:00     Почему вы избегаете использовать возможности С++11 ? #93
Fulcrum_013, std::function, std::mem_fn.
Fulcrum_013
661 / 729 / 72
Регистрация: 14.12.2014
Сообщений: 5,698
Завершенные тесты: 3
01.08.2016, 20:02     Почему вы избегаете использовать возможности С++11 ? #94
Цитата Сообщение от silent_1991 Посмотреть сообщение
std::function, std::mem_fn.
Ну это и есть лямбда-костыль. При этом нативная поддержка делегатов появилась задолго до лябда-костылей. В 1997-ом.
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
01.08.2016, 20:04     Почему вы избегаете использовать возможности С++11 ? #95
Fulcrum_013, не вижу здесь ничего костыльного, не понимаю, каким боком тут лямбды (в общем случае), но это по крайней мере стандартная штука, в отличие от "нативной поддержки делегатов".
Fulcrum_013
661 / 729 / 72
Регистрация: 14.12.2014
Сообщений: 5,698
Завершенные тесты: 3
01.08.2016, 20:10     Почему вы избегаете использовать возможности С++11 ? #96
Цитата Сообщение от silent_1991 Посмотреть сообщение
в отличие от "нативной поддержки делегатов"
Вот за то что в стандарте нет нативной поддержки делегатов комитет стоит конкретно выпороть. Так же как и за свойств и за RTTI. Потому как у всех есть уже 20 лет только по разному, а в стандарте нет? Почему что это языковые средства которые не могут быть реализованы библиотечными средствами. А спецификация языка не является субъектом авторского права в отличии от кода библиотеки. Соответсвенно развивая язык а не пропихивая в обязаловку кривые поделки Dincumware бабаса не наваришь.

Добавлено через 1 минуту
Цитата Сообщение от silent_1991 Посмотреть сообщение
каким боком тут лямбды (в общем случае)
Другого способа вызвать метод объекта неизвестного заранее класса кроме как через лямбду нет. В стандарте нет указателей на метод объекта, есть только указатели на метод класса.
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
01.08.2016, 20:15     Почему вы избегаете использовать возможности С++11 ? #97
Fulcrum_013, так а чем же всё-таки не устраивают стандартные средства?
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
пропихивая в обязаловку кривые поделки Dincumware
А вот тут я что-то пропустил. У меня сложилось впечатление, что они только буст потихоньку в стандарт затаскивают
Fulcrum_013
661 / 729 / 72
Регистрация: 14.12.2014
Сообщений: 5,698
Завершенные тесты: 3
01.08.2016, 20:28     Почему вы избегаете использовать возможности С++11 ? #98
Цитата Сообщение от silent_1991 Посмотреть сообщение
А вот тут я что-то пропустил. У меня сложилось впечатление, что они только буст потихоньку в стандарт затаскивают
Ну знач с STL им бабаса мало . Опять же его надо переодически обновлять чтоб капусту стричь, а то авторское право имеет срок давности. Но начиналось все это с пропихивания поделок Dincumware.

Добавлено через 6 минут
Цитата Сообщение от silent_1991 Посмотреть сообщение
так а чем же всё-таки не устраивают стандартные средства?
Их отсутствием.
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
01.08.2016, 20:42     Почему вы избегаете использовать возможности С++11 ? #99
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Другого способа вызвать метод объекта неизвестного заранее класса кроме как через лямбду нет. В стандарте нет указателей на метод объекта, есть только указатели на метод класса.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
 
class IntFinder {
public:
    explicit IntFinder(int value): m_value(value) { }
    bool check(int value) const { return m_value == value; }
private:
    int m_value;
};
 
int main() {
    IntFinder f(42);
    std::vector<int> vec = { 1, 3, 42, 5, 7 };
    auto finder = std::mem_fn(&IntFinder::check);
    auto pred = std::bind(finder, f, std::placeholders::_1);
    auto v = std::find_if(std::begin(vec), std::end(vec), pred);
    std::cout << *v << std::endl;
    return 0;
}
http://ideone.com/DDvjvh

Не по теме:

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Но начиналось все это с пропихивания поделок Dincumware.
Ну почему же из вас по 10 раз приходится информацию вытягивать?..

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2016, 21:05     Почему вы избегаете использовать возможности С++11 ?
Еще ссылки по теме:
Почему нельзя использовать более одной TServerSocket? C++ Builder
Что лучше использовать QMake или CMake и почему?
Пояснить, почему в примере не рекомендуется использовать закрытое наследование C++
C++ Почему программа в Windows может использовать лишь 1792 мегабайта RAM?
C++ Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Fulcrum_013
661 / 729 / 72
Регистрация: 14.12.2014
Сообщений: 5,698
Завершенные тесты: 3
01.08.2016, 21:05     Почему вы избегаете использовать возможности С++11 ? #100
Цитата Сообщение от Voivoid Посмотреть сообщение
ак же, это как? Какой компаратор будет для сортировки int'ов? Какой компаратор будет для сортировки структуры по одному из полей? Для каждого из этих случаев писать функцию/метод?
Будет через лямбду. Но как бы у меня к примеру такого в районе 0. Потому что в основном задачи во первых требуют обычно не сортировки, а поддержания упорядоченности последовательности при добавлении, во вторых заранее известно по какому из полей поддерживать сортировать структур, т.е. возможна реализация операторов сравнения для структур. В третьих количество используемых последовательностей базовых типов равна нулю, использование структур тоже около нуля. Преимущественно последовательности указателей на полиморфные классы, которые при всем при этом обычно нуждаются не в сортировке а в слежении за жизненным циклом и переброске из списка в список при изменении состояний.

Добавлено через 12 минут
а если вот так надо:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
typedef int (__closure *TEvent)(int a);
 
class foo{
       public:
       TEvent OnEvent=nullptr; 
       Foo();
       void SomeMethod(){
                int a;
              // do some tasks;
              b=Onhandler?OnHandler(a):a;
              //do other tasks;
       } 
};
class bar{
        public:
        int Handler(int a){
                         //Do some tasks
                      return a+2;
             }; 
}
class baz{
        public:
        int Handler(int a){
                         //Do other tasks
                      return a-2;
             }; 
}
int main(){
           Foo *a=new Foo();
           Bar *b=new Bar();
           Baz *c=new Baz();
           a->OnEvent= b->Handler;
           a->SomeMethod();
           a->OnEvent= c->Handler;
           a->SomeMethod();
}
при этом классы Bar и Baz созданы не только для того чтобы к a чего то прибавить. к примеру все три класса элементы отображения (ну или вообще долгоживущие элементы модели), которым необходимо оповещать другие элементы в случае каких либо своих действий.
Yandex
Объявления
01.08.2016, 21:05     Почему вы избегаете использовать возможности С++11 ?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru