diff --git a/include/dynamic-graph/signal-caster.h b/include/dynamic-graph/signal-caster.h index d4a56e5309e1054def13aea206a0c2334cbcaa11..a713b415abea8eb6f66df39d613ad4a42908849d 100644 --- a/include/dynamic-graph/signal-caster.h +++ b/include/dynamic-graph/signal-caster.h @@ -47,7 +47,6 @@ namespace dynamicgraph class DYNAMIC_GRAPH_DLLAPI SignalCaster { public: - explicit SignalCaster (); virtual ~SignalCaster (); /// Typedef of displayer functions that take an encapsulated 'any' @@ -87,10 +86,14 @@ namespace dynamicgraph std::map<std::string, cast_functions_type> functions_; std::map<std::string, const std::type_info*> type_info_; + + private: + explicit SignalCaster (); + friend SignalCaster& g_caster(void); }; - /// The library-wide instance of SignalCaster - extern DYNAMIC_GRAPH_DLLAPI SignalCaster g_caster; + /// Access on the library wide caster instance (simple singleton design). + DYNAMIC_GRAPH_DLLAPI SignalCaster& g_caster(void); ///The SignalCast registerer class. Can be used to automatically /// register a cast when instanced somewhere in a cpp file. Pass the @@ -105,7 +108,7 @@ namespace dynamicgraph SignalCaster::caster_type caster, SignalCaster::tracer_type tracer) { - g_caster.registerCast(type, displayer, caster, tracer); + g_caster().registerCast(type, displayer, caster, tracer); } }; @@ -117,19 +120,19 @@ namespace dynamicgraph template<typename T> void signal_disp (const T& value, std::ostream& os) { - g_caster.disp(value, os); + g_caster().disp(value, os); } template<typename T> T signal_cast(std::istringstream& iss) { - return boost::any_cast<T>(g_caster.cast(typeid(T), iss)); + return boost::any_cast<T>(g_caster().cast(typeid(T), iss)); } template<typename T> void signal_trace (const T& value, std::ostream& os) { - g_caster.trace(value, os); + g_caster().trace(value, os); } } // end of namespace dynamicgraph. diff --git a/src/signal/signal-cast-helper.cpp b/src/signal/signal-cast-helper.cpp index 8f409c65d31b007b672b5700ed3b6a876d0dbdef..109fc51bc020d75c90afd1d2ab05584228e4ca3c 100644 --- a/src/signal/signal-cast-helper.cpp +++ b/src/signal/signal-cast-helper.cpp @@ -70,10 +70,10 @@ namespace dynamicgraph namespace { DefaultCastRegisterer<double> double_reg; - DefaultCastRegisterer<int> int_reg; - DefaultCastRegisterer<unsigned int> uint_reg; - DefaultCastRegisterer<dynamicgraph::Vector> vectorCastRegisterer; - DefaultCastRegisterer<dynamicgraph::Matrix> matrixCastRegisterer; + // DefaultCastRegisterer<int> int_reg; + // DefaultCastRegisterer<unsigned int> uint_reg; + // DefaultCastRegisterer<dynamicgraph::Vector> vectorCastRegisterer; + // DefaultCastRegisterer<dynamicgraph::Matrix> matrixCastRegisterer; } // end of anonymous namespace. } // namespace dynamicgraph diff --git a/src/signal/signal-caster.cpp b/src/signal/signal-caster.cpp index 02842ffe430bf254c85d98dc31129a9c8ab76449..6ab9aacd8d5bee34afd84a7edba656efaba79424 100644 --- a/src/signal/signal-caster.cpp +++ b/src/signal/signal-caster.cpp @@ -120,6 +120,21 @@ namespace dynamicgraph } /// The global instance of the caster class. - SignalCaster g_caster; + //SignalCaster g_caster; + /// Singleton on the library-wide instance of SignalCaster + SignalCaster& g_caster(void) + { + static SignalCaster staticptr; + return staticptr; + } } // namespace dynamicgraph + + + + +struct sigcastint +{ + sigcastint() { std::cout << "sigcastint!" << std::endl; } +}; +sigcastint sigcastint_init;