Статическая лямбда в инициализации класса - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь сделать инициализацию лямбда-выражение в классе. Псевдокод может быть таким

class A{
  //stuff..
  static constexpr auto lambda = [] (unsigned char element){//stuff..};

};

Когда я пытался скомпилировать, я получаю это сообщение об ошибке

 error: ‘constexpr const A::<lambda(unsigned char)> A::get_range’, declared using local type ‘const A::<lambda(unsigned char)>’, is used but never defined [-fpermissive]
 static constexpr auto lambda = [](unsigned char element){

Как я могу сделать это при инициализации класса? Спасибо большое и простите за английский.

1 Ответ

0 голосов
/ 06 июля 2018

Начиная с C ++ 17, лямбды могут быть constexpr, ( P0170R1 ), однако это еще не поддерживается на всех компиляторах, поэтому в зависимости от вашего компилятора это может работать или не работать (g ++поддерживает это, начиная с версии 7, компилятор Intel будет использовать его начиная с 19.0).

В качестве обходного пути вы можете использовать decltype для реализации static const лямбда-члена

auto lambda = [](unsigned char element){};
class A{
   //stuff
   static const decltype(lambda) a;
};
const decltype(lambda) A::a{lambda};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...