
AMDG Marco Costalba <mcostalba <at> gmail.com> writes:
At compile time it's not a problem, also is not a problem to check for the same signature parameter types at runtime.
The real problem is to support automatic conversions (int -> double, derived* -> base*) at runtime.
I would try this struct implicit_conversion { const std::type_info* from_type; const std::type_info* to_type; void* (convert)(void*); void (*destroy)(void*); } class implicit_conversion_set { std::set<implicit_conversion> conversions; }; template<class R> class dispatcher { implicit_conversion_set conversions; R (*f0)(); std::map<tuple<const std::type_info*>, R(*)(void*)> f1; std::map<tuple<const std::type_info*, const std::type_info*>, R(*)(void*, void*)> f2; //... }; i.e. implicit conversions need to be registered. In Christ, Steven Watanabe