xtd 0.2.0
startup.h
Go to the documentation of this file.
1 #pragma once
6 #include "core_export.h"
7 #include "delegate.h"
8 #include "static.h"
9 #include <exception>
10 #include <optional>
11 
13 namespace xtd {
20  class core_export_ startup final static_ {
21  public:
40  template <typename main_function_t>
41  static int safe_run(main_function_t main_function) {
42  return internal_safe_run(main_function, std::nullopt, std::nullopt);
43  }
44 
65  template <typename main_function_t>
66  static int safe_run(main_function_t main_function, int argc, char* argv[]) {
67  return internal_safe_run(main_function, argc, argv);
68  }
69 
71  static int safe_run(xtd::delegate<void()> main_function, int argc, char* argv[]);
72  static int safe_run(xtd::delegate<void()> main_function);
73  static int safe_run(xtd::delegate<void(int, char* [])> main_function, int argc, char* argv[]);
74  static int safe_run(xtd::delegate<void(int, char* [])> main_function);
75  static int safe_run(xtd::delegate<void(const xtd::collections::specialized::string_vector&)> main_function, int argc, char* argv[]);
76  static int safe_run(xtd::delegate<void(const xtd::collections::specialized::string_vector&)> main_function);
77  static int safe_run(xtd::delegate<int()> main_function, int argc, char* argv[]);
78  static int safe_run(xtd::delegate<int()> main_function);
79  static int safe_run(xtd::delegate<int(int, char* [])> main_function, int argc, char* argv[]);
80  static int safe_run(xtd::delegate<int(int, char* [])> main_function);
81  static int safe_run(xtd::delegate<int(const xtd::collections::specialized::string_vector&)> main_function, int argc, char* argv[]);
82  static int safe_run(xtd::delegate<int(const xtd::collections::specialized::string_vector&)> main_function);
83  static int safe_run(void (*main_function)(int, char* []), int argc, char* argv[]);
84  static int safe_run(void (*main_function)(int, char* []));
85  static int safe_run(void (*main_function)(const xtd::collections::specialized::string_vector&), int argc, char* argv[]);
86  static int safe_run(void (*main_function)(const xtd::collections::specialized::string_vector&));
87  static int safe_run(int (*main_function)(int, char* []), int argc, char* argv[]);
88  static int safe_run(int (*main_function)(int, char* []));
89  static int safe_run(int (*main_function)(const xtd::collections::specialized::string_vector&), int argc, char* argv[]);
90  static int safe_run(int (*main_function)(const xtd::collections::specialized::string_vector&));
92 
93  private:
94  template <typename main_function_t>
95  static int internal_safe_run(main_function_t main_function, std::optional<int> argc, std::optional<char**> argv) {
96  try {
97  init_safe_run();
98  auto exit_code = argc == std::nullopt && argv == std::nullopt ? run(main_function) : run(main_function, argc.value(), argv.value());
99  end_safe_run();
100  return exit_code;
101  } catch(const std::exception& e) {
102  show_generic_exception_message(e);
103  } catch(...) {\
104  show_generic_exception_message();
105  }
106  return 0;
107  }
108 
109  static void init_safe_run();
110 
111  static void end_safe_run();
112 
113  static int run(xtd::delegate<void()> main_function, int argc, char* argv[]);
114  static int run(xtd::delegate<void()> main_function);
115  static int run(void (*main_function)(), int argc, char* argv[]);
116  static int run(void (*main_function)());
117  static int run(xtd::delegate<void(int, char* [])> main_function, int argc, char* argv[]);
118  static int run(xtd::delegate<void(int, char* [])> main_function);
119  static int run(void (*main_function)(int, char* []), int argc, char* argv[]);
120  static int run(void (*main_function)(int, char* []));
121  static int run(xtd::delegate<void(const xtd::collections::specialized::string_vector&)> main_function, int argc, char* argv[]);
122  static int run(xtd::delegate<void(const xtd::collections::specialized::string_vector&)> main_function);
123  static int run(void (*main_function)(const xtd::collections::specialized::string_vector&), int argc, char* argv[]);
124  static int run(void (*main_function)(const xtd::collections::specialized::string_vector&));
125  static int run(xtd::delegate<int()> main_function, int argc, char* argv[]);
126  static int run(xtd::delegate<int()> main_function);
127  static int run(int (*main_function)(), int argc, char* argv[]);
128  static int run(int (*main_function)());
129  static int run(xtd::delegate<int(int, char* [])> main_function, int argc, char* argv[]);
130  static int run(xtd::delegate<int(int, char* [])> main_function);
131  static int run(int (*main_function)(int, char* []), int argc, char* argv[]);
132  static int run(int (*main_function)(int, char* []));
133  static int run(xtd::delegate<int(const xtd::collections::specialized::string_vector&)> main_function, int argc, char* argv[]);
134  static int run(xtd::delegate<int(const xtd::collections::specialized::string_vector&)> main_function);
135  static int run(int (*main_function)(const xtd::collections::specialized::string_vector&), int argc, char* argv[]);
136  static int run(int (*main_function)(const xtd::collections::specialized::string_vector&));
137 
138  static void show_generic_exception_message(const std::exception& e);
139  static void show_generic_exception_message();
140  };
141 }
142 
162 #define startup_(main_method) \
163  auto main(int argc, char* argv[])->int {\
164  return xtd::startup::safe_run(main_method, argc, argv);\
165  }\
166  intptr_t __opaque_sftews__ = 0 // force to end with semicolon
167 
168 
176 #define startup_class_(main_class) \
177  auto main(int argc, char* argv[])->int {\
178  return xtd::startup::safe_run(main_class::main, argc, argv);\
179  }\
180  intptr_t __opaque_sftews__ = 0 // force to end with semicolon
Contains xtd::static_object class.
Defines the xtd::startup object that can be used in the main method to safely call the application&#39;s ...
Definition: startup.h:20
Contains xtd::delegate delegate.
#define static_
This keyword is use to represent a static object. A static object can&#39;t be instantiated (constructors...
Definition: static.h:37
static int safe_run(main_function_t main_function)
Safely call the specified application&#39;s main entry point.
Definition: startup.h:41
The xtd namespace contains all fundamental classes to access Hardware, Os, System, and more.
Definition: system_report.h:17
Contains xtd::collections::specialized::string_vector typedef.
std::vector< xtd::ustring > string_vector
Represents a collection of strings.
Definition: string_vector.h:25
static int safe_run(main_function_t main_function, int argc, char *argv[])
Safely call the specified application&#39;s main entry point, argc and argv.
Definition: startup.h:66