Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Как сконвертировать GNU-C вложенные функции в лямбды С++ и чтоб переносимо

28.01.19 13:57
Как сконвертировать GNU-C вложенные функции в лямбды С++ и чтоб переносимо
 
  ilghiz знакомое лицо

Добрый день,


есть тонна своего кода на GNU-C, который использует вложенные функции (nested functions), которые так и не воткнули в стандарт. Решил таки перетащить это все на стандартный С++. Всегда думал, что ламбды в С++ - это почти то же самое, что и вложенные функции. Уткнулся, что не могу скомпилировать вроде бы тривиальщину:


void Func(int N, int M, double *_X)
{ double (*X)[M] = static_cast<double (*)[M]>((void*)_X);
int i, j;
double (*Tester1)(int, int);
double (*Tester2)(double *);



Tester1 = [&] (int k, int l) -> double
{ return (double)(k*1000+l); };



Tester2 = [&] (double *XX) -> double
{ int i; double r; for(i=1; i<M; i++) r+=XX*XX; return r; };



for(i=0; i<N; i++)
for(j=0; j<M; j++)
X[j]=Tester1(i,j); // i*1000+j;



for(i=0; i<N; i++)
X[0]=Tester2(X+1);
return;
}


причем первая лямбда (Tester1) компилируется, а вторая - нет что типа не может сконвертировать тип.


Подскажите, пожалуйста, что я делаю не так?


Спасибо!

 

Перейти на