Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
Templatized Visitor Pattern Example
//Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23506 for x86 #include <iostream> #include <string> using namespace std; template<typename> class IClassVisitor; class TestVisitor; template<typename T> class Visitable { public: void Accept(IClassVisitor<T>* visitor); }; class Test : public Visitable<Test> { public: Test() : val(111) {} void work() {} int getVal() { return val; } private: int val; }; template<typename T> class IClassVisitor { public: virtual void Visit(T& obj) = 0; }; template<typename T> void Visitable<T>::Accept(IClassVisitor<T>* visitor) { visitor->Visit(static_cast<T&>(*this)); } class TestVisitor : public IClassVisitor<Test> { void Visit(Test& obj) override { cout << "Visiting Test class with new Visitor. Member Value : " << obj.getVal() << endl; } }; int main() { cout << "Visitor Pattern Example" << endl; Test * ptr = new Test(); IClassVisitor<Test>* visitor = new TestVisitor(); ptr->Accept(visitor); cout << "Done" << endl; }
run
|
edit
|
history
|
help
0
Title
print adapted struct
<string> Indirect include of <errno.h> with VSC++
Hangman
move swap
virtual test
MSVC noexcept - works
VC++ '-flag Fail
Test
MSVC ignoring unknown attributes