Запитання з тегом «std-function»

7
std :: функція проти шаблону
Завдяки C ++ 11 ми отримали std::functionсімейство функторних обгортків. На жаль, я продовжую чути лише погані речі щодо цих нових доповнень. Найпопулярнішим є те, що вони жахливо повільні. Я тестував це, і вони справді смоктали в порівнянні з шаблонами. #include <iostream> #include <functional> #include <string> #include <chrono> template <typename F> …

4
std :: function та std :: bind: що вони таке, і коли їх слід використовувати?
Я знаю, що таке функтори та коли їх використовувати з stdалгоритмами, але я не зрозумів, що Stroustrup каже про них у поширених запитаннях C ++ 11 . Чи може хтось пояснити, що std::bindі що std::function, коли їх слід використовувати, та навести кілька прикладів для новачків?

3
Як правильно перевірити, чи функція std :: порожня в C ++ 11?
Мені було цікаво, як правильно перевірити, чи не std::functionє порожнім. Розглянемо цей приклад: class Test { std::function<void(int a)> eventFunc; void registerEvent(std::function<void(int a)> e) { eventFunc = e; } void doSomething() { ... eventFunc(42); } }; Цей код чудово компілюється в MSVC, але якщо я дзвоню doSomething()без ініціалізації, eventFuncкод, очевидно, виходить …

6
C ++ 11 std :: встановити функцію порівняння лямбда-сигналу
Я хочу створити std::setспеціальну функцію порівняння. Я міг би визначити це як клас з operator(), але я хотів насолодитися можливістю визначати лямбда-де, де він використовується, тому я вирішив визначити лямбда-функцію в списку ініціалізації конструктора класу, який є std::setчленом. Але я не можу зрозуміти тип лямбди. Перш ніж продовжувати, ось приклад: …

4
Чому std :: функція не бере участі у вирішенні перевантаження?
Я знаю, що наступний код не компілюється. void baz(int i) { } void baz() { } class Bar { std::function<void()> bazFn; public: Bar(std::function<void()> fun = baz) : bazFn(fun){} }; int main(int argc, char **argv) { Bar b; return 0; } Тому що std::function, як я читав у цьому іншому дописі, …

1
std :: функція const правильність
Припустимо, я маю такий тип дзвінка: struct mutable_callable { int my_mutable = 0; int operator()() { // Not const return my_mutable++; } }; Зауважте, що mutable_callable має non-const, operator()що змінює змінну члена ..... Тепер припустимо, що я створюю std::functionсвій тип: std::function<int()> foo = mutable_callable{}; Тепер я можу це зробити: void …

2
Виклик лямбда неоднозначний, незважаючи на те, що прямо вказано тип повернення
Перевантажена функція повинна приймати обох функторів, враховуючи тип лямбда, який можна вирішити (можна видалити до std::function(будь-ласка, виправте мене, якщо я помиляюся). Питання: Чому внизу є помилка компіляції, незважаючи на те, що тип лямбда явно виражений визначено? ( [&]() -> Type {}) Зауважте, що для мого поточного рішення мені потрібна система …
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.