boost :: protoマニュアルには、タイプstd :: transform <...>:の端末に一致する文法の例があります。
struct StdComplex
: proto::terminal< std::complex< proto::_ > >
{};
proto::_のタイプで何かを行う変換を書きたいと思います。たとえば、proto :: terminal <std :: complex <T>>と一致すると、boost ::shared_ptr<T>が返されます。
これは可能ですか?
私の質問を述べる別の方法は、次のスニペットを機能させるにはどうすればよいですか?
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) >
{};