ctkAbstractObjectFactory.tpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /*=========================================================================
  2. Library: CTK
  3. Copyright (c) Kitware Inc.
  4. All rights reserved.
  5. Distributed under a BSD License. See LICENSE.txt file.
  6. This software is distributed "AS IS" WITHOUT ANY WARRANTY; without even
  7. the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  8. See the above copyright notice for more information.
  9. =========================================================================*/
  10. #ifndef __ctkAbstractObjectFactory_tpp
  11. #define __ctkAbstractObjectFactory_tpp
  12. // CTK includes
  13. #include "ctkAbstractObjectFactory.h"
  14. // QT includes
  15. #include <QDebug>
  16. //----------------------------------------------------------------------------
  17. template<typename BaseClassType, typename ClassType>
  18. ctkFactoryObjectItem<BaseClassType,ClassType>::ctkFactoryObjectItem(const QString& _key)
  19. :ctkAbstractFactoryItem<BaseClassType>(_key)
  20. {
  21. }
  22. //----------------------------------------------------------------------------
  23. template<typename BaseClassType, typename ClassType>
  24. bool ctkFactoryObjectItem<BaseClassType,ClassType>::load()
  25. {
  26. this->instantiateObjectFunc = &instantiateObject<BaseClassType, ClassType>;
  27. return true;
  28. }
  29. //----------------------------------------------------------------------------
  30. template<typename BaseClassType, typename ClassType>
  31. BaseClassType* ctkFactoryObjectItem<BaseClassType,ClassType>::instanciator()
  32. {
  33. return this->instantiateObjectFunc();
  34. }
  35. //----------------------------------------------------------------------------
  36. template<typename BaseClassType>
  37. ctkAbstractObjectFactory<BaseClassType>::ctkAbstractObjectFactory()
  38. {
  39. }
  40. //----------------------------------------------------------------------------
  41. template<typename BaseClassType>
  42. ctkAbstractObjectFactory<BaseClassType>::~ctkAbstractObjectFactory()
  43. {
  44. }
  45. //-----------------------------------------------------------------------------
  46. template<typename BaseClassType>
  47. template<typename ClassType>
  48. bool ctkAbstractObjectFactory<BaseClassType>::registerObject(const QString& key)
  49. {
  50. // Check if already registered
  51. if (this->item(key))
  52. {
  53. return false;
  54. }
  55. QSharedPointer<ctkFactoryObjectItem<BaseClassType, ClassType> > objectItem =
  56. QSharedPointer<ctkFactoryObjectItem<BaseClassType, ClassType> >(
  57. new ctkFactoryObjectItem<BaseClassType, ClassType>(key) );
  58. return this->registerItem(objectItem);
  59. }
  60. #endif