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

C++

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

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

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

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

всем привет.

сабж.

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

благодарен.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2012, 12:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему вы избегаете использовать возможности С++11 ? (C++):

Почему нельзя использовать более одной TServerSocket? - C++ Builder
Пробовал использовать в программе две компоненты TserverSocket и не получилось. Выдает ошибку: «Обычно разрешается одно использование...

Почему следует избегать явного приведения типов? (по возможности) - C++
Почему следует избегать явного приведения типов? (по возможности)

Почему не получается использовать bitset в VC++? - C++
Никак не получается использовать bitset в VC++6 . Очень надо - двоичный вектор . В стандарте описан bitset , но работать отказывается ....

Почему не рекомендуется использовать препроцессор? - C++
Я сейчас активно пользуюсь #define для упрощения понимания кода. Например, у меня сложная система классов, что бы получить одну...

Почему break нельзя использовать в if? - C++
почему break нельзя использовать в if вот код if(f.eof()==1) { break; } про break MVS говорит что ОПЕРАТОР break...

Почему плохо использовать unsigned int? - C++
Почему плохо использовать unsigned int и чему он удобней для представления массивов бит чеm signed int? (Из Страуструпа)

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
01.08.2016, 19:42 #91
Fulcrum_013, стоп-стоп-стоп. Если у вас уже есть реализованный функтор (будь то функция, метод или объект с перегруженным оператором ()) - вы его точно так же можете передать в алгоритм или куда хотите. А вот если нет - тут-то и пригодятся лямбды. Именно для таких случаев они и нужны - чтобы не плодить одноразовые сущности. Определил, использовал, забыл. Не стоит быть столь категоричным.
0
Fulcrum_013
720 / 745 / 73
Регистрация: 14.12.2014
Сообщений: 5,855
Завершенные тесты: 3
01.08.2016, 19:55 #92
Цитата Сообщение от silent_1991 Посмотреть сообщение
Именно для таких случаев они и нужны - чтобы не плодить одноразовые сущности. Определил, использовал, забыл. Не стоит быть столь категоричным.
Есть класс номер раз. Он имеет набор событий. Есть класс номер два три четыре пять и т.д.о которых классу номер раз вообще ничего не известно. Задача - привязать к событию метод из объектов классов два, три четыре пять, десять и т.д. с совпадением сигнатур. Именно это и позволяет сделать нативная поддержка делегатов, без всякого не относящегося к делу кода. присвоил обработчик и все. Компилятор сигнатуры проверил, и все ок. Если нативной поддержки нет то приходится лямбда-костыль использовать или при его отсутствии городить функторы вручную (во времена DOS так и делал). Т.е. с нативной поддержкой делегатов при присваивании указателя на метод объекта,получается компилятор определил использовал и забыл.
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
01.08.2016, 20:00 #93
Fulcrum_013, std::function, std::mem_fn.
0
Fulcrum_013
720 / 745 / 73
Регистрация: 14.12.2014
Сообщений: 5,855
Завершенные тесты: 3
01.08.2016, 20:02 #94
Цитата Сообщение от silent_1991 Посмотреть сообщение
std::function, std::mem_fn.
Ну это и есть лямбда-костыль. При этом нативная поддержка делегатов появилась задолго до лябда-костылей. В 1997-ом.
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
01.08.2016, 20:04 #95
Fulcrum_013, не вижу здесь ничего костыльного, не понимаю, каким боком тут лямбды (в общем случае), но это по крайней мере стандартная штука, в отличие от "нативной поддержки делегатов".
0
Fulcrum_013
720 / 745 / 73
Регистрация: 14.12.2014
Сообщений: 5,855
Завершенные тесты: 3
01.08.2016, 20:10 #96
Цитата Сообщение от silent_1991 Посмотреть сообщение
в отличие от "нативной поддержки делегатов"
Вот за то что в стандарте нет нативной поддержки делегатов комитет стоит конкретно выпороть. Так же как и за свойств и за RTTI. Потому как у всех есть уже 20 лет только по разному, а в стандарте нет? Почему что это языковые средства которые не могут быть реализованы библиотечными средствами. А спецификация языка не является субъектом авторского права в отличии от кода библиотеки. Соответсвенно развивая язык а не пропихивая в обязаловку кривые поделки Dincumware бабаса не наваришь.

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

Добавлено через 6 минут
Цитата Сообщение от silent_1991 Посмотреть сообщение
так а чем же всё-таки не устраивают стандартные средства?
Их отсутствием.
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
01.08.2016, 20:42 #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 раз приходится информацию вытягивать?..

0
Fulcrum_013
720 / 745 / 73
Регистрация: 14.12.2014
Сообщений: 5,855
Завершенные тесты: 3
01.08.2016, 21:05 #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 чего то прибавить. к примеру все три класса элементы отображения (ну или вообще долгоживущие элементы модели), которым необходимо оповещать другие элементы в случае каких либо своих действий.
0
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
01.08.2016, 21:42 #101
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Но как бы у меня к примеру такого в районе 0
Лол, вообще-то большая часть алгоритмов принимает в качестве аргумента какую-либо функцию
0
HelicopterK52
660 / 203 / 28
Регистрация: 27.07.2016
Сообщений: 474
Завершенные тесты: 1
01.08.2016, 22:01 #102
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
int bar=5;//вот так
Цитата Сообщение от silent_1991 Посмотреть сообщение
In-place инициализация полей тоже крутая вещь.
Держите:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
 
 
class foo{
public:
    int bar=5;//вот так 
};
 
 
 
int main()
{
    foo f;
    std::cout << f.bar << std::endl;
}
http://rextester.com/OVJ52706

Надеюсь, довольны оба.
0
Fulcrum_013
720 / 745 / 73
Регистрация: 14.12.2014
Сообщений: 5,855
Завершенные тесты: 3
01.08.2016, 22:38 #103
Цитата Сообщение от Voivoid Посмотреть сообщение
Лол, вообще-то большая часть алгоритмов принимает в качестве аргумента какую-либо функцию
Имеются в виду алгоритмы из std:: algoritms? У меня их пользовать негде.
Основная задача с контейнерами - пройти по спискам обработки, вызвать метод для каждого хранимого (вызываемый метод для каждого из списков обработки разный), при этом учесть что внутри метода объект может либо переместится в другой список либо вообще удалиться.
0
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
01.08.2016, 23:21 #104
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Имеются в виду алгоритмы из std:: algoritms? У меня их пользовать негде.
Основная задача с контейнерами - пройти по спискам обработки, вызвать метод для каждого хранимого
Не суть важно std или нет. Т.е. разные поиски, подсчеты, группировки, отображения, фильтры, свертки, упорядочивания и прочее не нужны? Ну ок, вопросов больше не имею
0
Fulcrum_013
720 / 745 / 73
Регистрация: 14.12.2014
Сообщений: 5,855
Завершенные тесты: 3
01.08.2016, 23:37 #105
Цитата Сообщение от Voivoid Посмотреть сообщение
Т.е. разные поиски, подсчеты, группировки, отображения,
Они сгруппированы по спискам отработки. При изменении состояния добавляются/удаляются в/из соответсвующего списка обработки. (функционал в базовых шаблонных классах от которого порождаются контейнер-мультисписок и содержимый объект). В результате в содержимом объекте добавляются только логика включения/выключения переключателей нахождения в том или ином списке. В общем получается что группировка по спискам/она же нужная выборка поддерживается автоматически. При этом список нужных выборок/групп всегда известен заранее.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2016, 23:37
Привет! Вот еще темы с ответами:

Почему не стоит использовать ^(XOR) в swap - C++
Прочитал статейку, http://betterexplained.com/articles/swap-two-variables-using-xor/ Что-то не до понял, почему нельзя...

Почему clear необходимо использовать до seekg? - C++
...и нельзя сразу после? Долго не могла решить проблему пока не наткнулась на тему где f.clear() шел до f.seekg(). И мне стало интересно))...

Пояснить, почему в примере не рекомендуется использовать закрытое наследование - C++
Всем доброго времени суток ! Помогите пожалуйста разобраться с этой фразой на примере . То что я знаю про закрытое наследование ,...

Почему программа в Windows может использовать лишь 1792 мегабайта RAM? - C++
Простейшая программа, для того чтобы узнать сколько памяти можно использовать в системе. int main() { unsigned int...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.08.2016, 23:37
Ответ Создать тему
Опции темы

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