On 01/31/2012 07:01 PM, Eric Niebler wrote:

You mean, for instance, you want Proto's operator+ to return an
expression with a tag other than tag::plus?

Yes.


Can I ask why?

I need to attach certain information to the type of operation that the tag represents, and putting that information as typedefs in the tag type itself would be fairly convenient.

Most of my tags are user-defined, except from the ones that map to built-in C++ operators.

Of course, I could also just have a mapping of proto tags to custom tags that have that information (that is what I'm currently doing).

I was just being curious whether another approach was possible.


You can do
this in a generator, but you're right to be cautious of compile times.
Proto will instantiate a bunch of templates while assembling each
expression before passing them to your generator, which would just rip
them apart and throw them away.

Your other option would be to use the (undocumented)
BOOST_PROTO_DEFINE_UNARY_OPERATOR and
BOOST_PROTO_DEFINE_BINARY_OPERATOR to define a complete alternate set
of operator overloads that use your tags instead of proto's. See
proto/operators.hpp. Nobody has ever done this and I don't know if it
would work.

I guess I won't take that option then ;)
_______________________________________________
proto mailing list
proto@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/proto

Reply via email to