在 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) >
{};