3 ms·
I don't understand why the class instance needs to accept the interaction. Why not just invoke the interaction directly? interactor_p->interact(thingy_p)
by deckar01 8y ago
I don't understand why the class instance needs to accept the interaction. Why not just invoke the interaction directly?
interactor_p->interact(thingy_p)
Would this still be considered the visitor pattern or is the extra layer of indirection important?
- fraffo 8y agoYour code won't compile because interactor::interact is not defined on the base class. That line is needed because the overload resolution is static. So with the macro ACCEPTS, you build the code where the overload is resolved.
- deckar01 8y agoI see. There is no interact signature that accepts IThingy, which is the whole point of this pattern. Thanks.
- scroot 8y agoI don't know about the limitations of C++, but something like what you describe would happen in Smalltalk. Take for example a Canvas object and a bunch of different shape objects (square, circle, etc): "Square class" drawOn: aCanvas aCanvas line: (some point) to: (some point). "etc" "Triangle class" drawOn: aCanvas aCanvas line: self leftVertex to: self rightVertex. "etc" "Canvas class" drawShapes: aCollection aCollection do: [ :shape | shape drawOn: self ]