1 // ANNA - Anna is Not Nothingness Anymore //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
9 #ifndef anna_app_functions_hpp
10 #define anna_app_functions_hpp
12 #include <anna/core/functions.hpp>
14 #include <anna/app/Application.hpp>
23 functions - Metodos y variables
25 struct functions : public anna::functions {
27 Devuelve la referencia de la instancia de nuestra aplicacion
29 static Application& getApp() throw(RuntimeException);
32 Patron para obtener facilmente la instancia de un determinado componente.
33 Estos dos parametros suelen ser sustituidos por la macro C <b>FILE_LOCATION</b>.
35 \param fromFile Fichero desde el que se invoca a este metodo
36 \param fromLine Numero de linea desde el que se invoca a este metodo.
38 \return La instancia del componente de la clase recibida como parametro.
39 \warning La clase T de implementar un metodo de la forma:
41 static const char* getClassName () throw ();
45 template <typename T> static T* component(const char* fromFile, const int fromLine)
46 throw(anna::RuntimeException) {
47 return component<T> (T::getClassName(), fromFile, fromLine);
51 Patron para obtener facilmente la instancia de un determinado componente.
52 Estos dos parametros suelen ser sustituidos por la macro C <b>FILE_LOCATION</b>.
53 \param className Nombre del componente buscado.
54 \param fromFile Fichero desde el que se invoca a este metodo
55 \param fromLine Numero de linea desde el que se invoca a este metodo.
57 \return La instancia del componente de la clase recibida como parametro.
60 template <typename T> static T* component(const char* className, const char* fromFile, const int fromLine)
61 throw(anna::RuntimeException) {
62 T* result = static_cast <T*>(functions::getApp().find(className));
65 std::string msg(className);
66 msg += " | Componente no registrado";
67 throw RuntimeException(msg, fromFile, fromLine);