xtd 0.2.0
startup.hpp
Go to the documentation of this file.
1
4#pragma once
6#include "core_export.hpp"
7#include "delegate.hpp"
8#include "optional.hpp"
9#include "static.hpp"
10#include <exception>
11#define __XTD_CORE_INTERNAL__
13#undef __XTD_CORE_INTERNAL__
14
16namespace xtd {
24 public:
26
46 template<class main_function_t>
47 static int safe_run(main_function_t main_function) {
48 return internal_safe_run(main_function, std::nullopt, std::nullopt);
49 }
50
71 template<class main_function_t>
72 static int safe_run(main_function_t main_function, int argc, char* argv[]) {
73 return internal_safe_run(main_function, argc, argv);
74 }
75
76
78 static int safe_run(xtd::delegate<void()> main_function, int argc, char* argv[]);
79 static int safe_run(xtd::delegate<void()> main_function);
80 static int safe_run(xtd::delegate<void(int, char* [])> main_function, int argc, char* argv[]);
81 static int safe_run(xtd::delegate<void(int, char* [])> main_function);
82 static int safe_run(xtd::delegate<void(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
83 static int safe_run(xtd::delegate<void(const xtd::argument_collection&)> main_function);
84 static int safe_run(xtd::delegate<int()> main_function, int argc, char* argv[]);
85 static int safe_run(xtd::delegate<int()> main_function);
86 static int safe_run(xtd::delegate<int(int, char* [])> main_function, int argc, char* argv[]);
87 static int safe_run(xtd::delegate<int(int, char* [])> main_function);
88 static int safe_run(xtd::delegate<int(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
89 static int safe_run(xtd::delegate<int(const xtd::argument_collection&)> main_function);
90 static int safe_run(void (*main_function)(int, char* []), int argc, char* argv[]);
91 static int safe_run(void (*main_function)(int, char* []));
92 static int safe_run(void (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
93 static int safe_run(void (*main_function)(const xtd::argument_collection&));
94 static int safe_run(int (*main_function)(int, char* []), int argc, char* argv[]);
95 static int safe_run(int (*main_function)(int, char* []));
96 static int safe_run(int (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
97 static int safe_run(int (*main_function)(const xtd::argument_collection&));
99
100 private:
101 template<class main_function_t>
102 static int internal_safe_run(main_function_t main_function, std::optional<int> argc, std::optional<char**> argv) {
103 try {
104 init_safe_run();
105 auto exit_code = argc == std::nullopt && argv == std::nullopt ? run(main_function) : run(main_function, argc.value(), argv.value());
106 end_safe_run();
107 return exit_code;
108 } catch (const std::exception& e) {
109 __show_generic_exception_message__(e);
110 return EXIT_FAILURE;
111 } catch (...) {
112 \
113 __show_generic_exception_message__();
114 return EXIT_FAILURE;
115 }
116 }
117
118 static void init_safe_run();
119
120 static void end_safe_run();
121
122 static int run(xtd::delegate<void()> main_function, int argc, char* argv[]);
123 static int run(xtd::delegate<void()> main_function);
124 static int run(void (*main_function)(), int argc, char* argv[]);
125 static int run(void (*main_function)());
126 static int run(xtd::delegate<void(int, char* [])> main_function, int argc, char* argv[]);
127 static int run(xtd::delegate<void(int, char* [])> main_function);
128 static int run(void (*main_function)(int, char* []), int argc, char* argv[]);
129 static int run(void (*main_function)(int, char* []));
130 static int run(xtd::delegate<void(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
131 static int run(xtd::delegate<void(const xtd::argument_collection&)> main_function);
132 static int run(void (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
133 static int run(void (*main_function)(const xtd::argument_collection&));
134 static int run(xtd::delegate<int()> main_function, int argc, char* argv[]);
135 static int run(xtd::delegate<int()> main_function);
136 static int run(int (*main_function)(), int argc, char* argv[]);
137 static int run(int (*main_function)());
138 static int run(xtd::delegate<int(int, char* [])> main_function, int argc, char* argv[]);
139 static int run(xtd::delegate<int(int, char* [])> main_function);
140 static int run(int (*main_function)(int, char* []), int argc, char* argv[]);
141 static int run(int (*main_function)(int, char* []));
142 static int run(xtd::delegate<int(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
143 static int run(xtd::delegate<int(const xtd::argument_collection&)> main_function);
144 static int run(int (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
145 static int run(int (*main_function)(const xtd::argument_collection&));
146 };
147}
148
168#define startup_(main_method) \
169 auto main(int argc, char* argv[]) -> int { \
170 return xtd::startup::safe_run(main_method, argc, argv); \
171 } \
172 intptr_t __opaque_sftews__ = 0 // force to end with semicolon
173
181#define startup_class_(main_class) \
182 auto main(int argc, char* argv[]) -> int { \
183 return xtd::startup::safe_run(main_class::main, argc, argv); \
184 } \
185 intptr_t __opaque_sftews__ = 0 // force to end with semicolon
Contains show_generic_exception_message methods.
Contains xtd::argument_collection alias.
Defines the xtd::startup object that can be used in the main method to safely call the application's ...
Definition startup.hpp:23
static int safe_run(main_function_t main_function, int argc, char *argv[])
Safely call the specified application's main entry point, argc and argv.
Definition startup.hpp:72
static int safe_run(main_function_t main_function)
Safely call the specified application's main entry point.
Definition startup.hpp:47
Contains core_export_ keyword.
Contains xtd::delegate <result_t(arguments_t...)> delegate.
#define static_
This keyword is use to represent a static object. A static object can't be instantiated (constructors...
Definition static.hpp:37
#define core_export_
Define shared library export.
Definition core_export.hpp:13
xtd::array< xtd::string > argument_collection
Represents the collection of arguments passed to the main entry point method.
Definition argument_collection.hpp:19
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition abstract_object.hpp:8
Contains xtd::optional type.
Contains xtd::static_object class.