#pragma once #include #include #include namespace trygvis { namespace apps { namespace po = boost::program_options; class app_execution { public: app_execution(po::options_description desc, po::variables_map vm) : desc(desc), vm(vm) { } po::options_description desc; po::variables_map vm; void usage(); }; class app { public: app(std::string app_name): _app_name(app_name), logger(log4cplus::Logger::getInstance(LOG4CPLUS_TEXT(app_name))) { } virtual ~app() = default; virtual void add_options(po::options_description_easy_init &options) { }; virtual void add_extra_options(po::options_description &options) { }; virtual int main(app_execution &execution) = 0; protected: const std::string _app_name; const log4cplus::Logger logger; }; int launch_app(int argc, char *argv[], app &app); std::string get_hostname(); template class noop_delete { public: void operator()(T *) const { } }; static inline void noop_deleter(void *) { } } }