Как использовать неполиморфную лямбду в Boost Proto / Phoenix?

Я хотел бы предоставить API, который принимает пользовательскую лямбду Boost Phoenix. В отличие от лямбды C ++ 11, лямбда-феникс полиморфна.

Я могу использовать [] оператор лямбда-аргумента. Следующий фрагмент выведет первый элемент массива arr:

int arr[4] = {1,2,3,4};
cout << _1[_2](arr,0) << endl;

Как я могу позволить пользователю получить доступ к данным члена или методам лямбда-аргумента? Например, следующий фрагмент кода не скомпилируется; давая: ошибка: у типа const нет члена с именем x

struct vec2 { float x,y; };
vec2 v2{1,2};
cout << ((_1).x)(v2) << endl;

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …