вы знаете, что компилятор преобразует лямбда-выражение в некий функтор:
захваченные переменные становятся членами данных этого функтора. Переменные, захваченные по значению, копируются в элементы данных функтора. Эти элементы данных имеют ту же самую константность, что и захваченные переменные и так далее ...
Теперь мне интересно, возможно ли перехватить адрес этого скрытого объекта, сгенерированного компилятором за кулисами
Iдать вам простой фрагмент (НЕПРАВИЛЬНОГО) кода, чтобы показать мои намерения:
#include <iostream>
using namespace std;
class MetaData
{
public:
void printAddress()
{
cout << "\n printAddress:Instance of MetaData at &" << this;
}
};
int main()
{
MetaData md1;
cout << "\n &md1 = " << &md1 << "\n";
md1.printAddress();
cout << "\n\n--------------------\n\n";
int i = 5;
auto x = [i]() mutable {
//cout << "\n The address of the functor is &" << this; // ERROR ! ! !
cout << "\n Hello from Lambda ";
cout << "\n &i = " << &i << " ++i ==> " << ++i << endl; };
x(); // executing lambda
auto y = x; // y is constructed with copy ctor
y();
}
Ссылка на Coliru
Я бы хотел, чтобы скрытый функтор вел себя как MetaDatas.
Может кто-нибудь очистить мой разум?
Спасибо за ваше время.