В руководстве boost :: proto приведен пример грамматики, которая соответствует терминалам типа std :: transform <...>:
struct StdComplex
: proto::terminal< std::complex< proto::_ > >
{};
Я хотел бы написать преобразование, которое делает что-то с типом proto :: _.
Например, при сопоставлении с proto :: Terminal > возвращается boost :: shared_ptr .
Возможно ли это?
Другой способ сформулировать мой вопрос: как заставить работать следующий фрагмент кода?
template<typename T>
struct Show : proto::callable
{
typedef T result_type;
result_type operator()(T& v)
{
std::cout << "value = " << v << std::endl;
return v;
}
};
struct my_grammar
: proto::when<proto::terminal<proto::_ >, Show<??? what comes here ???>(proto::_value) >
{};