5 ms·
Did you have a previous experience of something easier? May you share about it?
by antpls 8y ago
Did you have a previous experience of something easier? May you share about it?
- magicalhippo 8y agoI'm curious about this as well. When writing my own interpreter it didn't take me long before I opted to use the visitor pattern, and once I did it felt like a natural fit.
- chubot 8y agoNot the OP, but I took a survey of the /r/programminglanguages reddit, where basically everybody has to deal with the "visitor issue". https://www.reddit.com/r/ProgrammingLanguages/comments/7w3oeh/whats_your_experience_with_visitors/ https://www.reddit.com/r/ProgrammingLanguages/comments/7w3oe... The top comment supported the use of the visitor pattern, but I would say that MOST people in the thread did NOT use visitors. You only really need a visitor if you have more than one traversal. And even then you don't necessarily need it.
- criddell 8y agoWhat is the actual problem? Is it multiple dispatch? I think some languages (Lisp may be one) handle it natively. Visitor is the only way I know of dealing with it in C++. Once you do it enough, Visitor starts to feel like a pretty natural way to extend a class without modifying the class.
- jcelerier 8y ago> Visitor is the only way I know of dealing with it in C++. Once you do it enough, Visitor starts to feel like a pretty natural way to extend a class without modifying the class. Are you talking about traditonal OOP visitor pattern ? It's pretty terrible, when compared to std::variant ; imagine for instance that you want to have a way to draw the rect that contains a given shape without changing your shape class: https://godbolt.org/g/34KyMw https://godbolt.org/g/34KyMw
- criddell 8y agoIf your interface is that consistent, why not just make the bounding box drawing function a template? Visitor is nice when some kind of transformation needs to be applied to the visited objects.
- isaachier 8y agoIf using C++ I'd usually just opt for a type enum and switch on it. Visitor is a better way of using type to dispatch, but harder to see control flow.