powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос по bind
46 сообщений из 46, показаны все 2 страниц
Вопрос по bind
    #38549255
Фотография Духовные скрепы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читаю книжку по STL и в одном месте конкретно затупил:
Binding to Data Members
You can also bind to data members. Consider the following example (namespaces omitted):4
Код: plaintext
1.
2.
3.
4.
5.
map<string,int> coll; // map of int values associated to strings
...
// accumulate all values (member second of the elements)
int sum
= accumulate (coll.begin(), coll.end(), 0, bind(plus<int>(), _1, bind(&map<string,int>::value_type::second, _2)));


Here, accumulate() is called, which uses a binary predicate to sum up all values of all elements
(see Section 11.11.1, page 623). However, because we use a map, where the elements are key/value
pairs, to gain access to an element’s value
Код: plaintext
1.
bind(&map<string,int>::value_type::second,_2)


binds the passed second argument of each call of the predicate to its member second.


Что делает вот это вот
Код: plaintext
1.
bind(&map<string,int>::value_type::second, _2)

и как оно это делает?
...
Рейтинг: 0 / 0
Вопрос по bind
    #38549273
Фотография Духовные скрепы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ещё вопрос, такой код:
Код: plaintext
1.
2.
3.
4.
5.
int count=0; // call counter
pos = remove_if(coll.begin(),coll.end(), // range
    [count] (int) mutable { // remove criterion
        return ++count == 3;
    });



тут count копируется? Если да то зачем mutable?
...
Рейтинг: 0 / 0
Вопрос по bind
    #38549300
Фотография Духовные скрепы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
со вторым вопросом разобрался, из лямбды генерируется
Код: plaintext
1.
bool operator ()(int) const

.
...
Рейтинг: 0 / 0
Вопрос по bind
    #38549444
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Духовные скрепыЧто делает вот это вот
Код: plaintext
1.
bind(&map<string,int>::value_type::second, _2)


и как оно это делает?
Это специальный вид bind'а, работающий с указателем на поле класса, а не с функцией. См. ниже.

Вообще исходное выражение
Код: plaintext
1.
accumulate (coll.begin(), coll.end(), 0, bind(plus<int>(), _1, bind(&map<string,int>::value_type::second, _2)));


совмещает две следующие техники работы с bind:
Код: plaintext
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.
struct S {
    int a;
};
S s = { 10 };

int func1(int x,int y) { return x + y; }
int func2(int y) { return y; }

int main()
{

    // Первый специальный вид bind: bind(указатель_на_поле_класса, экземпляр класса)
    // Возвращает функтор принимающий аргументом указатель/ссылку на экземпляр класса,
    // и возвращающий значение забайнденного поля для этого экземпляра
    auto f1 = bind(&S::a, _1);
    cout << f1(&s) << endl;  // return s->a; //10

    // Второй специальный вид bind:  bind(funс, _1, _2, bind(..._1, _2)) - когда аргумент который байндится
    // к функции, является тоже bind'ом, забайнденным к тому же набору плейсхолдеров
    // (_1, _2... любые из них)
    // Возвращает функтор, который принимает указанное число аргументов и вычисляет
    // все функторы вложенных bind'ов с помощью этих же аргументов
    auto f2 = bind(func1, _1, bind(func2, _2));
    cout << f2(10/*_1*/, 20/*_2*/) << endl; // return func1(10, func2(20)); //30

    return 0;
}



Подробнее может Mozok рассказать. Он знает толк
...
Рейтинг: 0 / 0
Вопрос по bind
    #38549503
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Духовные скрепы,

как бы теперь эту всю хрень можно не изучать - с лямбдами это все делается проще.
...
Рейтинг: 0 / 0
Вопрос по bind
    #38549513
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivкак бы теперь эту всю хрень можно не изучать - с лямбдами это все делается проще.
Пока еще не все .
Вот когда лямбды будут поддерживать move-семантику для замыкания (С++14) вот тогда будет все :)

ЗЫ. Хотя, синтаксис, которым предлагается делать перемещающий захват переменных в С++14 - тот еще по легкости и ясности. Я бы лучше с помощью bind продолжал бы :)
...
Рейтинг: 0 / 0
Вопрос по bind
    #38549528
Фотография Духовные скрепы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyВот когда лямбды будут поддерживать move-семантику для замыкания (С++14) вот тогда будет все :)
ЗЫ. Хотя, синтаксис, которым предлагается делать перемещающий захват переменных в С++14 - тот еще по легкости и ясности.

Можно пример move-семантики для замыкания у лямбд в C++14?
...
Рейтинг: 0 / 0
Вопрос по bind
    #38549539
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyВот когда лямбды будут поддерживать move-семантику для замыкания (С++14) вот тогда будет все :)
Упс. И тогда еще не все будет :)

Вот такое не знаю вообще как лямбдами сделать.
Код: plaintext
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.
void callback1(const boost::system::error_code& ec, size_t bytes_transferred)
{
}
void callback2(size_t bytes_transferred, const boost::system::error_code& ec)
{
}
void callback3(const boost::system::error_code& ec)
{
}

int main()
{

    // клиент некого АПИ
    auto f1 = bind(callback1, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred);
    auto f2 = bind(callback2, boost::asio::placeholders::bytes_transferred, boost::asio::placeholders::error);
    auto f3 = bind(callback3, boost::asio::placeholders::error);

    // реализация этого АПИ
    boost::system::error_code ec;
    size_t bytes_transferred = 0;
    f1(ec, bytes_transferred);
    f2(ec, bytes_transferred);
    f3(ec, bytes_transferred);

    return 0;
}


Фишка в том, что клиент некой библиотеки передает туда колбэки с произвольным набором и порядком аргументов (из набора поддерживаемых библиотекой).
При этом клиент не обязан знать все поддерживаемые параметры и в каком порядке их указывать. А библиотека в свою очередь не обязана знать порядок аргументов указанный клиентом чтобы вызвать колбэк.
В итоге библиотека может развиваться (добавлять новые параметры) без необходимости переписывать существующих клиентов. А клиент может получать только те параметры, которые ему интересны.
...
Рейтинг: 0 / 0
Вопрос по bind
    #38549548
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Духовные скрепыМожно пример move-семантики для замыкания у лямбд в C++14?
Например если у нас есть переменная capture_var и мы хотим ее переместить при захвате, то будет так:
Код: plaintext
1.
[ capture_var{std::move(capture_var)} ] { use(capture_var); } 



Эта фича называется обобщенный захват (generalized lambda capture).
Внутри capture_var{...} можно указывать любое выражение допустимое при инициализации переменных.
В данном случае это std::move().
...
Рейтинг: 0 / 0
Вопрос по bind
    #38549550
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для сравнения, то же самое через bind:
Код: plaintext
1.
auto f = bind(&use, std::move(capture_var));
...
Рейтинг: 0 / 0
Вопрос по bind
    #38549552
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS. use - это ключевое слово. Если вы хотите протестить этот код вам надо переименовать эту функцию (не говоря уже о том что создать ее) :)
...
Рейтинг: 0 / 0
Вопрос по bind
    #38549553
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyPS. use - это ключевое слово. Если вы хотите протестить этот код вам надо переименовать эту функцию (не говоря уже о том что создать ее) :)
А не, отбой. Это using ключевое слово, а use - нет :)
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550030
Alex the coder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот тред уронил больно ударил по моей самооценке. И что, все эти ужасы реально используются в ваших проектах и на собеседованиях спрашиваются?
Коли так, то я совсем отстал от жызни оО т.к. вообще не юзаю не то что bind/STL, но даже шаблоны :)
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550066
Фотография Духовные скрепы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex the coderИ что, все эти ужасы реально используются в ваших проектах и на собеседованиях спрашиваются?

В моих проектах ещё не используются, но планирую начать использовать с весны, после заседания комитета где C++14 утвердят или не утвердят. GCC и CLang уже декларируют полную совместимость с C++14.
На собеседованиях у меня спрашивали про то что из boost использовал, а многое C++11 взял из boost. Конкретно про C++11 или STL из C++11 ещё не спрашивали, из C++03 спрашивали фсё. Полагаю, что скоро начнут и из C++11 спрашивать фсё.

Alex the coderКоли так, то я совсем отстал от жызни оО т.к. вообще не юзаю не то что bind/STL, но даже шаблоны :)

Ну, что сказать, кроме самого юзания этих вещей, которые ещё нужно освоить, нужно будет освоить где их нужно юзать и как правильно юзать.
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550162
Alex the coder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Духовные скрепы, а не посоветуете опенсорсный проект, где можно подглядеть хорошие примеры использования новшеств C++11?
У меня-то в проекте запрещено использование что С++11, что буста. Да и вообще KISS во все поля :)
P.S. Помнится, в Акронисе были довольно простые тесты по С++. Меня скорее подвело незнание нужных паттернов.
Выходит, сейчас сложнее всё...
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550178
Фотография Духовные скрепы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex the coderне посоветуете опенсорсный проект, где можно подглядеть хорошие примеры использования новшеств C++11?

Вот здесь что-то пишут C++11, вроде нормально - https://github.com/cocaine/cocaine-core

Alex the coderВыходит, сейчас сложнее всё...

Зависит от размера хотелки денег, на 80 тыр. одни вопросы, на 120 тыр. уже другие.
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550210
Alex the coder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Духовные скрепы, о, слышал об этом проекте Яндекса. Там так понимаю ерунды не пишут :) Спасибо.

Насчёт собеседований - от меня и на 80к требовали глубокие знания STL, алгоритмов и прочий компутерсайнс, а я только на одном Qt быдлокодю :/ Хотя с нюансами самого С++ справляюсь сносно.
Выходит, надо развиться до требуемого уровня самостоятельно и только потом искать работу, т.к. ни разу тут не видел вакансий С++-джуниоров.
И простите за оффтоп в Вашей теме. Наболело что-то. Вроде и работаю не первый год, а востребованность только падает, навыки забываются. Вот тебе и "интересные задачи"(с)
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550225
Alex the coder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Духовные скрепы, кстати одно время писал эпические вложенные boost::bind'ы - ну когда нужно было хитрым образом извлечь инфу их одного контейнера, напустить на нее определенный обработчик и положить в другой. В итоге меня обругали и заставили писать всё это более очевидным образом :) сейчас уже успешно забыл вообще как bind работает.
У Вас случаем нет неких правил на тему "читабельности" bind-кода? аля "не допускать вложенности больше третьего уровня".
Хотя лямбды конечно здорово спасают ситуацию.
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550227
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex the coderДуховные скрепы, о, слышал об этом проекте Яндекса. Там так понимаю ерунды не пишут :) Спасибо.

Насчёт собеседований - от меня и на 80к требовали глубокие знания STL, алгоритмов и прочий компутерсайнс, а я только на одном Qt быдлокодю :/ Хотя с нюансами самого С++ справляюсь сносно.
Выходит, надо развиться до требуемого уровня самостоятельно и только потом искать работу, т.к. ни разу тут не видел вакансий С++-джуниоров.
И простите за оффтоп в Вашей теме. Наболело что-то. Вроде и работаю не первый год, а востребованность только падает, навыки забываются. Вот тебе и "интересные задачи"(с)

Да, сейчас вообще как-то с требованиями к С++-никам всё неадекватно. Вернее, с требованиями -- адекватно, они ХОТЯТ, а вот с отдачей от этого как-то хуже -- они НЕ МОГУТ.
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550309
Alex the coder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, кстати может подскажете - а новые проекты вообще на плюсах пишут? У меня-то впечатление, что в основном требуется разгребать авгиевы конюшни.
Я сейчас на новом проекте как раз, чем эта работа и подкупила - но с другой стороны, слишком уж узкая специализация (только Qt). Как-то очень не хочется снова идти разгребать чужой, эм, не очень хороший и недокументированный код.
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550323
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex the coderMasterZiv, кстати может подскажете - а новые проекты вообще на плюсах пишут? У меня-то впечатление, что в основном требуется разгребать авгиевы конюшни.
Я сейчас на новом проекте как раз, чем эта работа и подкупила - но с другой стороны, слишком уж узкая специализация (только Qt). Как-то очень не хочется снова идти разгребать чужой, эм, не очень хороший и недокументированный код.

Я знаю, что кто-то что-то пишет.
Но я не центр вселенной.

У нас в нашей стране вообще IT всё сильно смещено в сторону эксплуатации ПО, разработки прикладного ПО.
Разработка системных компонент и средств производства у нас как-то не очень развита.
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550479
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex the coderЭтот тред уронил больно ударил по моей самооценке. И что, все эти ужасы реально используются в ваших проектах и на собеседованиях спрашиваются?
Коли так, то я совсем отстал от жызни оО т.к. вообще не юзаю не то что bind/STL, но даже шаблоны :)
Я пока фичи С++11 не использую в продакшен проектах.
Буст - использую по полной программе.
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550485
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Духовные скрепы
Код: plaintext
1.
2.
3.
4.
5.
map<string,int> coll; // map of int values associated to strings
...
// accumulate all values (member second of the elements)
int sum
= accumulate (coll.begin(), coll.end(), 0, bind(plus<int>(), _1, bind(&map<string,int>::value_type::second, _2)));


Извращения с биндами конечно интересные, но по моему любой из следующих вариантов гораздо понятней :)
Код: plaintext
1.
2.
3.
4.
5.
map<string,int> coll; // map of int values associated to strings
...
// accumulate all values (member second of the elements)
int sum
= accumulate (coll.begin(), coll.end(), 0, [](int const& sum, decltype(coll)::value_type const& mval2) { return sum + mval2.second; } );


или
Код: plaintext
1.
2.
3.
4.
5.
map<string,int> coll; // map of int values associated to strings
...
// accumulate all values (member second of the elements)
int sum = 0;
for(auto &i : coll) sum += i.second;  // accumulate
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550496
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex the coderа новые проекты вообще на плюсах пишут? У меня-то впечатление, что в основном требуется разгребать авгиевы конюшни.
Пишут-пишут.
Alex the coderКак-то очень не хочется снова идти разгребать чужой, эм, не очень хороший и недокументированный код
Чужой код всегда плохой и недокументированный :)
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550512
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася Уткин,

Mozok бы с вами поспорил :)
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550533
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyAlex the coderЭтот тред уронил больно ударил по моей самооценке. И что, все эти ужасы реально используются в ваших проектах и на собеседованиях спрашиваются?
Коли так, то я совсем отстал от жызни оО т.к. вообще не юзаю не то что bind/STL, но даже шаблоны :)
Я пока фичи С++11 не использую в продакшен проектах.
Буст - использую по полной программе.
Кстати, а если не секрет, что у вас за проект, системный/прикладной, внутренний или на продажу и для какой сферы?
Я бы с удовольствием использовал C++11/14, но мы разрабатываем CPU+GPU системы и наши сорцы должны уметь собираться на RHEL5.5 + GCC4.1.2 , а gcc4.1.2 - это аж 2007 год :)
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550550
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася УткинКстати, а если не секрет, что у вас за проект, системный/прикладной, внутренний или на продажу и для какой сферы?
Текущий проект - HTTP кэш-прокси, на продажу для ISP (это не мой личный, я там просто один из разрабов).
Вася Уткинсорцы должны уметь собираться на RHEL5.5 + GCC4.1.2 , а gcc4.1.2 - это аж 2007 год :)
Та же фигня :)
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550597
Alex the coder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky, а из буста что конкретно, если не секрет юзаете?
Там же много всего. Я в своё время использовал только option, variant, конечно bind и всякие хэлперы для STL.
А насчёт "чужой код всегда хуже своего" - заранее-то тебе код никто не покажет ;( Я вот уже достаточно наработался с древним и недокументированном кодом для MFC. Так что конечно приятно творить в рамках нового проекта, когда руки не скованы.
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550695
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex the coderа из буста что конкретно, если не секрет юзаете?
thread, asio, shared_ptr, function, regex и тому подобное.
Все не вспомню.
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550702
Alex the coder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky, да этого достаточно, спасибо.
Кстати, не пробовали использовать библиотеку Poco?
Мне ее тимлид хвалил как-то.
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550737
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex the coderPoco
Я не пробовал, т.к. меня полностью устраивает Буст, а Буст фактически является стандартом дефакто (и многие его либы попадают в стандарт С++).
Ну и размер пользовательской базы Буста намного больше, а значит меньше шансов словить какой-то баг в непротестированном участке кода Буста.
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550769
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyAlex the coderPoco
Я не пробовал, т.к. меня полностью устраивает Буст, а Буст фактически является стандартом дефакто (и многие его либы попадают в стандарт С++).

Анатолий, вообще-то буст -- это набор библиотек, библиотек там много, и библиотеки там все разные совсем. Есть очень хорошие, есть совсем никудышные.
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550781
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

А я что, по другому сказал?
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550807
Фотография Духовные скрепы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex the coderКстати, не пробовали использовать библиотеку Poco?

Довольно ограниченна библиотека, сокеты есть, а именованных/безымянных каналов нету, по крайней мере раньше не было.
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550810
Фотография Духовные скрепы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЕсть очень хорошие, есть совсем никудышные.

Можно список никудышных библиотек?
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550943
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Духовные скрепыAlex the coderКстати, не пробовали использовать библиотеку Poco?

Довольно ограниченна библиотека, сокеты есть, а именованных/безымянных каналов нету, по крайней мере раньше не было.

А знаешь, почему их нет ?
...
Рейтинг: 0 / 0
Вопрос по bind
    #38550946
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Духовные скрепыMasterZivЕсть очень хорошие, есть совсем никудышные.

Можно список никудышных библиотек?

Ну я могу с ходу только boost::graph назвать.
...
Рейтинг: 0 / 0
Вопрос по bind
    #38551001
Фотография Духовные скрепы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivА знаешь, почему их нет ?

Ну и почему?
Мне для моей задачи пришлось либу писать с нуля, под никсами unix socket'ы использовать, под виндой пайпы.
...
Рейтинг: 0 / 0
Вопрос по bind
    #38551061
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Духовные скрепыMasterZivА знаешь, почему их нет ?

Ну и почему?
Мне для моей задачи пришлось либу писать с нуля, под никсами unix socket'ы использовать, под виндой пайпы.

Потому что
они непереносимы. пайпы работают только в винде.

они никому не нужны даже не по причине непереносимости.
...
Рейтинг: 0 / 0
Вопрос по bind
    #38551062
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Духовные скрепыНу и почему?


Ты кстати вооще знаешь, зачем они были придуманы и для чего?
...
Рейтинг: 0 / 0
Вопрос по bind
    #38551064
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivДуховные скрепыНу и почему?


Ты кстати вооще знаешь, зачем они (NamedPipes) были придуманы и для чего?
...
Рейтинг: 0 / 0
Вопрос по bind
    #38551073
Фотография Духовные скрепы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv они непереносимы. пайпы работают только в винде.

они никому не нужны даже не по причине непереносимости.


А чего так категорично, как истина в последней инстанции?
Как сказали делать так и делал, никакие мои аргументы не принимались. Соответственно мне пайпы оказались нужны.

MasterZivТы кстати вооще знаешь, зачем они (NamedPipes) были придуманы и для чего?

Нет блин, не знаю, использовал закрыв глаза и не читая доку.

Named pipes can be used to provide communication between processes on the same computer or between processes on different computers across a network. If the server service is running, all named pipes are accessible remotely. If you intend to use a named pipe locally only, deny access to NT AUTHORITY\NETWORK or switch to local RPC.

отсюда
...
Рейтинг: 0 / 0
Вопрос по bind
    #38551239
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Духовные скрепыА чего так категорично, как истина в последней инстанции?
А мы тут все такие :)
...
Рейтинг: 0 / 0
Вопрос по bind
    #38551264
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyAnatoly MoskovskyВот когда лямбды будут поддерживать move-семантику для замыкания (С++14) вот тогда будет все :)
Упс. И тогда еще не все будет :)

Вот такое не знаю вообще как лямбдами сделать.
Код: plaintext
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.
void callback1(const boost::system::error_code& ec, size_t bytes_transferred)
{
}
void callback2(size_t bytes_transferred, const boost::system::error_code& ec)
{
}
void callback3(const boost::system::error_code& ec)
{
}

int main()
{

    // клиент некого АПИ
    auto f1 = bind(callback1, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred);
    auto f2 = bind(callback2, boost::asio::placeholders::bytes_transferred, boost::asio::placeholders::error);
    auto f3 = bind(callback3, boost::asio::placeholders::error);

    // реализация этого АПИ
    boost::system::error_code ec;
    size_t bytes_transferred = 0;
    f1(ec, bytes_transferred);
    f2(ec, bytes_transferred);
    f3(ec, bytes_transferred);

    return 0;
}


Фишка в том, что клиент некой библиотеки передает туда колбэки с произвольным набором и порядком аргументов (из набора поддерживаемых библиотекой).
При этом клиент не обязан знать все поддерживаемые параметры и в каком порядке их указывать. А библиотека в свою очередь не обязана знать порядок аргументов указанный клиентом чтобы вызвать колбэк.
В итоге библиотека может развиваться (добавлять новые параметры) без необходимости переписывать существующих клиентов. А клиент может получать только те параметры, которые ему интересны.
А я чего-то не совсем понял, как он тут угадывает в f1() и f2() куда подставлять ec, а куда bytes_transferred?
В случае с шаблонами ещё как-то можно было бы придумать - много перегрузок функции со всеми комбинациями перестановки агрументов, при условии что все аргументы имеют разный тип. Но тут то в run-time, как?
...
Рейтинг: 0 / 0
Вопрос по bind
    #38551271
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася УткинА я чего-то не совсем понял, как он тут угадывает в f1() и f2() куда подставлять ec, а куда bytes_transferred?
В случае с шаблонами ещё как-то можно было бы придумать - много перегрузок функции со всеми комбинациями перестановки агрументов, при условии что все аргументы имеют разный тип. Но тут то в run-time, как?
Ну скажете тоже - угадывает. Все строго по-научному

boost::asio::placeholders::error - это аналог _1
boost::asio::placeholders::bytes_transferred - _2

Если вы в моем коде везде произведете такую замену, то станет понятно как это работает.
...
Рейтинг: 0 / 0
Вопрос по bind
    #38551296
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyВася УткинА я чего-то не совсем понял, как он тут угадывает в f1() и f2() куда подставлять ec, а куда bytes_transferred?
В случае с шаблонами ещё как-то можно было бы придумать - много перегрузок функции со всеми комбинациями перестановки агрументов, при условии что все аргументы имеют разный тип. Но тут то в run-time, как?
Ну скажете тоже - угадывает. Все строго по-научному

boost::asio::placeholders::error - это аналог _1
boost::asio::placeholders::bytes_transferred - _2

Если вы в моем коде везде произведете такую замену, то станет понятно как это работает.
А, всё, понял, и нюанс то в том, что вызов то всегда один и тот же: f3(ec, bytes_transferred); - и тут уже порядок менять нельзя :)
...
Рейтинг: 0 / 0
46 сообщений из 46, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос по bind
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]