converter.hpp
Go to the documentation of this file.
00001 
00008 /*****************************************************************************
00009 ** PreProcessor
00010 *****************************************************************************/
00011 
00012 #ifndef ECL_CONVERTERS_CONVERTER_HPP_
00013 #define ECL_CONVERTERS_CONVERTER_HPP_
00014 
00015 /*****************************************************************************
00016 ** Include
00017 *****************************************************************************/
00018 
00019 #include <ecl/errors/handlers.hpp>
00020 
00021 /*****************************************************************************
00022 ** Namespaces
00023 *****************************************************************************/
00024 
00025 namespace ecl {
00029 namespace converters {
00030 
00031 class ConverterBase {
00032 public:
00033         ConverterBase() : error_handler(ecl::NoError) {};
00034         virtual Error error() const { return error_handler; }
00035 protected:
00036         Error error_handler;
00037 };
00038 } // namespace converters
00042 /*****************************************************************************
00043 ** Converter Interface
00044 *****************************************************************************/
00055 template <typename Output, typename Input = void>
00056 class Converter : public converters::ConverterBase {
00057 public:
00058         virtual ~Converter() {}
00059         Output operator()(const Input &input);
00060 };
00061 
00070 template <typename Output>
00071 class Converter<Output,void> : public converters::ConverterBase {
00072 public:
00073     virtual ~Converter() {}
00074 
00075         template <typename Input>
00076         Output operator()(const Input &input);
00077 };
00078 
00079 /*****************************************************************************
00080 ** Converter Implementation
00081 *****************************************************************************/
00090 template <typename Output, typename Input>
00091 Output Converter<Output,Input>::operator ()(const Input &input)
00092 {
00093     return typename Output::Converter()(input);
00094 };
00095 
00104 template <typename Output>
00105 template <typename Input>
00106 Output Converter<Output,void>::operator ()(const Input &input)
00107 {
00108     return typename Output::Converter()(input);
00109 };
00110 
00111 }; // Namespace ecl
00112 
00113 
00114 #endif /* ECL_CONVERTERS_CONVERTER_HPP_ */


ecl_converters
Author(s): Daniel Stonier (d.stonier@gmail.com)
autogenerated on Thu Jan 2 2014 11:12:05