Slightly saner visitor-ing and less C++ overloading on functions