Run Code
|
API
|
Code Wall
|
Users
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Blog
Templatized Visitor Pattern Example
Language:
Ada
Assembly
Bash
C#
C++ (gcc)
C++ (clang)
C++ (vc++)
C (gcc)
C (clang)
C (vc)
Client Side
Clojure
Common Lisp
D
Elixir
Erlang
F#
Fortran
Go
Haskell
Java
Javascript
Kotlin
Lua
MySql
Node.js
Ocaml
Octave
Objective-C
Oracle
Pascal
Perl
Php
PostgreSQL
Prolog
Python
Python 3
R
Rust
Ruby
Scala
Scheme
Sql Server
Swift
Tcl
Visual Basic
Layout:
Vertical
Horizontal
//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; }
cl.exe
Show compiler warnings
[
+
] Compiler args
[
+
]
Show input
Compilation time: 1,64 sec, absolute running time: 0,22 sec, absolute service time: 1,88 sec
edit mode
|
history
|
discussion
Visitor Pattern Example Visiting Test class with new Visitor. Member Value : 111 Done