1

Тема: Чи можливо створити константну лямбду зі змінним станом.

Я можу таке зробити з фанктором:

    struct S
    {
        // Змінний стан
        mutable ...;

        bool operator()() const { 
            return false;
        }
    };
    const S s;

а як бути з люмбдою

2

Re: Чи можливо створити константну лямбду зі змінним станом.

const_cast хай вам допоможе.
А взагалі стани - то про дані, а не про лямбди.

3

Re: Чи можливо створити константну лямбду зі змінним станом.

koala написав:

А взагалі стани - то про дані, а не про лямбди.

mutable дозволяє лямбді мати стан.

4

Re: Чи можливо створити константну лямбду зі змінним станом.

mutable дозволяє лямбді змінювати захоплені змінні, а не мати стан. Хоча різниця тонка, тим не менш вона є.
Ну і взагалі мені здається, що mutable - це, як і const_cast, хак, щоб обійти невдалу архітектуру там, де її треба виправляти.

5 Востаннє редагувалося Yola (11.02.2016 15:47:19)

Re: Чи можливо створити константну лямбду зі змінним станом.

Уявімо, що вам треба прочитати з об"єкта щось і бути певним, що ви не потрапите у стан гонитви. Тут потрібен мютекс. А що якщо об'єкт константний? Адже з це семантично нормально читати з константного об'єкта. Ну що тут поробиш, зробимо мютекс мутабельним :)

struct S
{
  void lock() const { mutex_.lock(); } 
  void unlock() const { mutex_.unlock(); }

....

private:
  mutable mutex mutex_;
}

З приходом багатопотоковості у с++, mutable став на бік добра:)