На самом деле я не думаю, что есть простой способ их хранения. Если бы я хотел создать именованный экземпляр выражения boost :: lambda, я бы присвоил результат, скажем, int , а затем скопировал имя нужного типа из сообщения об ошибке компилятора:
#include <boost/lambda/lambda.hpp>
int main()
{
using namespace boost::lambda;
//int x = _1 + _2;
boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<
boost::lambda::arithmetic_action<boost::lambda::plus_action>,
boost::tuples::tuple<boost::lambda::lambda_functor<boost::lambda::placeholder<1> >,
boost::lambda::lambda_functor<boost::lambda::placeholder<2> >,
boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type> > > x = _1 + _2;
}
В реальной жизни вы, скорее всего, будете хранить их в типе, который стирает тип, например boost::function
.
#include <boost/lambda/lambda.hpp>
#include <boost/function.hpp>
int main()
{
using namespace boost::lambda;
boost::function<int(int, int)> x = _1 + _2;
return x(-1, 1);
}