diff --git a/src/Generator/Generators/Template.cs b/src/Generator/Generators/Template.cs
index 479a8704..35a1500a 100644
--- a/src/Generator/Generators/Template.cs
+++ b/src/Generator/Generators/Template.cs
@@ -1,9 +1,10 @@
+using System;
 using System.Collections.Generic;
 using CppSharp.AST;
 
 namespace CppSharp.Generators
 {
-    public abstract class Template : BlockGenerator
+    public abstract class Template : BlockGenerator, IDeclVisitor<bool>
     {
         public BindingContext Context { get; private set; }
 
@@ -35,5 +36,139 @@ namespace CppSharp.Generators
 
             return base.Generate();
         }
+
+        #region Visitor methods
+
+        public bool VisitDeclaration(Declaration decl)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitClassDecl(Class @class)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitFieldDecl(Field field)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitFunctionDecl(Function function)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitMethodDecl(Method method)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitParameterDecl(Parameter parameter)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitTypedefDecl(TypedefDecl typedef)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitTypeAliasDecl(TypeAlias typeAlias)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitEnumDecl(Enumeration @enum)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitEnumItemDecl(Enumeration.Item item)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitVariableDecl(Variable variable)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitMacroDefinition(MacroDefinition macro)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitNamespace(Namespace @namespace)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitEvent(Event @event)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitProperty(Property property)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitFriend(Friend friend)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitClassTemplateDecl(ClassTemplate template)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitClassTemplateSpecializationDecl(ClassTemplateSpecialization specialization)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitFunctionTemplateDecl(FunctionTemplate template)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitFunctionTemplateSpecializationDecl(FunctionTemplateSpecialization specialization)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitVarTemplateDecl(VarTemplate template)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitVarTemplateSpecializationDecl(VarTemplateSpecialization template)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitTemplateTemplateParameterDecl(TemplateTemplateParameter templateTemplateParameter)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitTemplateParameterDecl(TypeTemplateParameter templateParameter)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitNonTypeTemplateParameterDecl(NonTypeTemplateParameter nonTypeTemplateParameter)
+        {
+            throw new NotImplementedException();
+        }
+
+        public virtual bool VisitTypeAliasTemplateDecl(TypeAliasTemplate typeAliasTemplate)
+        {
+            throw new NotImplementedException();
+        }
+
+        #endregion
     }
 }