Hello,
I have some proto::terminal's as follows :
template<typename T>
struct Var {
unsigned int id;
};
typedef proto::terminal::type int32_;
typedef proto::terminal::type float_;
typedef proto::terminal::type double_;
I can write a callable transform, with templated operator() functions
to handle each Var<> type as follows :
struct _var_tostr :
proto::callable {
typedef std::string result_type;
template<typename T>
result_type operator()(variables::Var<T> const &v) const {
std::stringstream sout;
sout << "S" << v.id;
return sout.str();
}
template<typename T>
result_type operator()(variables::VecVar<T> const &v) const {
std::stringstream sout;
sout << "V" << v.id;
return sout.str();
}
};
To activate the transform, I end up writing one rule for each Var<>
type as follows :
struct var_tostr :
proto::or_<
proto::when
{ };
This gets cumbersome when I have more Var<> types. Is there a way to not list each Var<> type in the grammar? That is, I want to match any Var<T> and just call the _var_tostr(proto::_value) transform. How can I accomplish this? Thanks, Manjunath