iLab Neuromorphic Robotics Toolkit  0.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
tests/test-Factory.C
/*! @file
@author
@copyright GNU Public License (GPL v3)
@section License
@verbatim
// ////////////////////////////////////////////////////////////////////////
// The iLab Neuromorphic Robotics Toolkit (NRT) //
// Copyright 2010-2012 by the University of Southern California (USC) //
// and the iLab at USC. //
// //
// iLab - University of Southern California //
// Hedco Neurociences Building, Room HNB-10 //
// Los Angeles, Ca 90089-2520 - USA //
// //
// See http://ilab.usc.edu for information about this project. //
// ////////////////////////////////////////////////////////////////////////
// This file is part of The iLab Neuromorphic Robotics Toolkit. //
// //
// The iLab Neuromorphic Robotics Toolkit is free software: you can //
// redistribute it and/or modify it under the terms of the GNU General //
// Public License as published by the Free Software Foundation, either //
// version 3 of the License, or (at your option) any later version. //
// //
// The iLab Neuromorphic Robotics Toolkit is distributed in the hope //
// that it will be useful, but WITHOUT ANY WARRANTY; without even the //
// implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
// PURPOSE. See the GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with The iLab Neuromorphic Robotics Toolkit. If not, see //
// <http://www.gnu.org/licenses/>. //
// ////////////////////////////////////////////////////////////////////////
@endverbatim */
// ######################################################################
class WidgetBase
{
public:
virtual void printName() {NRT_INFO("WidgetBase");}
};
// ######################################################################
class SmartWidget : public WidgetBase
{
public:
SmartWidget() { NRT_INFO("Creating Smart Widget"); }
void printName() {NRT_INFO("SmartWidget");}
};
std::shared_ptr<WidgetBase> createSmartWidget()
{ return std::shared_ptr<WidgetBase>(new SmartWidget); }
bool addSmartWidget()
{
WidgetFactory::instance().registerType("smart", createSmartWidget);
return true;
}
const bool smartWidgetAdded = addSmartWidget();
// ######################################################################
class DumbWidget : public WidgetBase
{
public:
DumbWidget() { NRT_INFO("Creating Dumb Widget"); }
void printName() {NRT_INFO("DumbWidget");}
};
std::shared_ptr<WidgetBase> createDumbWidget()
{ return std::shared_ptr<WidgetBase>(new DumbWidget); }
bool addDumbWidget()
{
WidgetFactory::instance().registerType("dumb", createDumbWidget);
return true;
}
const bool dumbWidgetAdded = addDumbWidget();
int main()
{
std::shared_ptr<WidgetBase> smartWid = WidgetFactory::instance().create("smart");
smartWid->printName();
std::shared_ptr<WidgetBase> dumbWid = WidgetFactory::instance().create("dumb");
dumbWid->printName();
smartWid = smartWid;
dumbWid = dumbWid;
return 0;
}