1 /*========================================================================= 2 * 3 * Copyright Insight Software Consortium 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0.txt 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 *=========================================================================*/ 18 #ifndef itkFunctionBase_h 19 #define itkFunctionBase_h 20 21 #include "itkObject.h" 22 #include "itkObjectFactory.h" 23 24 namespace itk 25 { 26 /** 27 * \class FunctionBase 28 * \brief Base class for all ITK function objects 29 * 30 * FunctionBase is the base class for ITK function objects. Specifically, 31 * the abstract method Evaluate() maps a point from the input space to a point 32 * in the output space. 33 * 34 * Subclasses must override Evaluate(). 35 * 36 * This class is template over the input (domain) type and 37 * the output (range) type. 38 * 39 * \ingroup Functions 40 * 41 * \ingroup ITKCommon 42 */ 43 template< typename TInput, typename TOutput > 44 class ITK_TEMPLATE_EXPORT FunctionBase:public Object 45 { 46 public: 47 ITK_DISALLOW_COPY_AND_ASSIGN(FunctionBase); 48 49 /** Standard class type aliases. */ 50 using Self = FunctionBase; 51 using Superclass = Object; 52 using Pointer = SmartPointer< Self >; 53 using ConstPointer = SmartPointer< const Self >; 54 55 /** Run-time type information (and related methods). */ 56 itkTypeMacro(FunctionBase, Object); 57 58 /** Input type */ 59 using InputType = TInput; 60 61 /** Output type */ 62 using OutputType = TOutput; 63 64 /** Evaluate at the specified input position */ 65 virtual OutputType Evaluate(const InputType & input) const = 0; 66 67 protected: 68 FunctionBase()= default; 69 ~FunctionBase() override = default; 70 }; 71 } // end namespace itk 72 73 #endif 74