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 itkCreateObjectFunction_h 19 #define itkCreateObjectFunction_h 20 21 #include "itkObject.h" 22 23 namespace itk 24 { 25 /** \class CreateObjectFunctionBase 26 * \brief Define API for object creation callback functions. 27 * 28 * \ingroup ITKSystemObjects 29 * \ingroup ITKCommon 30 */ 31 class ITKCommon_EXPORT CreateObjectFunctionBase:public Object 32 { 33 public: 34 ITK_DISALLOW_COPY_AND_ASSIGN(CreateObjectFunctionBase); 35 36 /** Standard type alias. */ 37 using Self = CreateObjectFunctionBase; 38 using Superclass = Object; 39 using Pointer = SmartPointer< Self >; 40 using ConstPointer = SmartPointer< const Self >; 41 42 /** Create an object and return a pointer to it as an 43 * itk::LightObject. */ 44 virtual SmartPointer< LightObject > CreateObject() = 0; 45 46 protected: 47 CreateObjectFunctionBase(); 48 ~CreateObjectFunctionBase() override; 49 }; 50 51 /** \class CreateObjectFunction 52 * \brief Used to create callback functions that create ITK Objects for 53 * use with the itk::ObjectFactory. 54 * 55 * \ingroup ITKSystemObjects 56 * \ingroup ITKCommon 57 */ 58 template< typename T > 59 class CreateObjectFunction:public CreateObjectFunctionBase 60 { 61 public: 62 ITK_DISALLOW_COPY_AND_ASSIGN(CreateObjectFunction); 63 64 /** Standard class type aliases. */ 65 using Self = CreateObjectFunction; 66 using Pointer = SmartPointer< Self >; 67 68 /** Methods from itk:LightObject. */ 69 itkFactorylessNewMacro(Self); CreateObject()70 LightObject::Pointer CreateObject() override { return T::New().GetPointer(); } 71 72 protected: 73 CreateObjectFunction() = default; 74 ~CreateObjectFunction() override = default; 75 }; 76 } // end namespace itk 77 78 #endif 79