Могу ли я иметь именованную лямбда-функцию в качестве переменной внутри класса и попытаться вызвать именованную лямбда-функцию из основной функции? - PullRequest
1 голос
/ 09 мая 2020
#include <iostream>
using namespace std;

class convert
{
    public :
        int n;

        convert( int number)
        {
            n = number;     
        }
        auto showbits() =[](){
            cout<<"showbits called "<<endl; 
        };

};

int main() {
    convert c(10);
    auto val = c.showbits();
    return 0;
}

1. Я получаю следующую ошибку: недопустимый чистый спецификатор (допускается только '= 0') перед токеном ']'

1 Ответ

0 голосов
/ 09 мая 2020

У вас не может быть лямбда в качестве члена, потому что лямбда - это «странные» объекты, и вы можете объявить их только с помощью auto (нет возможности записать тип лямбда-выражения), однако auto non stati c члены не допускаются.

Для этого нет реальной причины, кроме того, что они так решили (формально причин много, но каждая из них также применима к другим вариантам использования auto, которые вместо этого разрешены, так что IMO они не объяснение).

Может быть, что-то изменится в будущем, когда кто-то еще будет в комитете.

Вы можете обойти проблему, используя std::function обертка для члена.

struct Foo {
    std::function<double(double)> square = [](double x) { return x*x; };
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...