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 /*=========================================================================
19  *
20  *  Portions of this file are subject to the VTK Toolkit Version 3 copyright.
21  *
22  *  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
23  *
24  *  For complete copyright, license and disclaimer of warranty information
25  *  please refer to the NOTICE file at the top of the ITK source tree.
26  *
27  *=========================================================================*/
28 #ifndef itkObjectFactory_h
29 #define itkObjectFactory_h
30 
31 #include "itkObjectFactoryBase.h"
32 
33 namespace itk
34 {
35 /** \class ObjectFactory
36  * \brief Create instances of a class.
37  *
38  * ObjectFactory is a helper class used to created instances of a
39  * class. Object factories are used for instantiation because they allow
40  * run-time replacement of a class with a user-supplied version. For
41  * example, if you wished to replace an algorithm with your own custom
42  * version, or with a hardware-accelerated version, ObjectFactory
43  * can be used to do this.
44  *
45  * This implementation of the object factory is templated and uses RTTI
46  * (Run-Time Type Information) to create the name of the class it is to
47  * instantiate. (The name may include template type parameters, depending
48  * on the class definition.)
49  *
50  * \ingroup ITKSystemObjects
51  * \ingroup ITKCommon
52  */
53 
54 template< typename T >
55 class ObjectFactory:public ObjectFactoryBase
56 {
57 public:
Create()58   static typename T::Pointer Create()
59   {
60     LightObject::Pointer ret = CreateInstance( typeid( T ).name() );
61 
62     return dynamic_cast< T * >( ret.GetPointer() );
63   }
64 };
65 } // end namespace itk
66 
67 #endif
68