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

Deprecated in C++11, Function objects - C++

Восстановить пароль Регистрация
 
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
24.12.2012, 22:15     Deprecated in C++11, Function objects #1
У меня возник небольшой вопрос по поводу некоторых функциональных объектов в С++11. Вот здесь http://en.cppreference.com/w/cpp/utility/functional такие классы как unary_function, binary_function и другие методы объявлены как deprecated, то есть не рекомендуемые для дальнейшего использования. Собственно, вопрос, чем они так за винили что от них отказываются и чем новый стандарт рекомендует пользоваться вместо них?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
24.12.2012, 22:18     Deprecated in C++11, Function objects #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Потому что с variadic templates стало возможным сделать обобщённую std::function, а не 100500 вариантов для разный арностей.
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,643
Записей в блоге: 17
25.12.2012, 00:21     Deprecated in C++11, Function objects #3
А пример можно?

Добавлено через 1 минуту
Как я помню от unary_function, binary_function нужно было наследоваться что можно было применить бинды.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
25.12.2012, 00:44     Deprecated in C++11, Function objects #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <functional>
 
int main()
{
    std::function<int(int)> f = [](int x) { return 2 * x; };
    auto f_a = std::bind(f, 2);
    
    std::function<int(int,int,int,int)> g = [](int a, int b, int c, int x)
                                            {
                                                return a * x * x + b * x + c;
                                            };
    auto g_a = std::bind(g, 1, 2, 3, std::placeholders::_1);
    
    // 2 * 2 == 4
    // 1 * 25 + 2 * 5 + 3 == 38
    std::cout << f_a() << " " << g_a(5);
}
Yandex
Объявления
25.12.2012, 00:44     Deprecated in C++11, Function objects
Ответ Создать тему
Опции темы

Текущее время: 11:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru