
Mathias Gaunard wrote:
Andrey Semashev wrote:
Mathias Gaunard wrote:
A while ago, I offered something like this
any m = 0; apply_visitor<int, double, A>(f, m);
or alternatively, apply_visitor(f, m); with f specifying all overloads in some compile-time reflection structure.
unfortunately, it cannot be made constant-time because std::type_info sucks.
FWIW, I would be really interested in this feature even if it's not constant time. May I hope it will appear in trunk one day?
It can actually be made constant-time using the result of std::type_info::name for dispatching. That means, however, that you need to know as a compile-time string the names of the types to check for, and have implemented a compile-time name mangling algorithm (which is of course platform-specific).
That looks like too much of a burden for users, let alone the portability issues. I think the implementation that provides the interface you mentioned above would be more suitable, even if slower. I don't think that people will often try to dispatch between hundreds or even tens of types, where the difference would matter.