+ simgrid::config::bind_flag(value_, name, aliases, desc);
+ }
+
+ /* A constructor accepting a callback that will be passed the parameter.
+ * It can either return a boolean (informing whether the parameter is valid), or returning void.
+ */
+ template <class F> Flag(const char* name, const char* desc, T value, F callback) : value_(value), name_(name)
+ {
+ simgrid::config::bind_flag(value_, name, desc, std::move(callback));
+ }
+
+ template <class F>
+ Flag(const char* name, std::initializer_list<const char*> aliases, const char* desc, T value, F callback)
+ : value_(value), name_(name)
+ {
+ simgrid::config::bind_flag(value_, name, aliases, desc, std::move(callback));
+ }
+
+ /* A constructor accepting a map of valid values -> their description,
+ * and producing an informative error message when an invalid value is passed, or when help is passed as a value.
+ */
+ template <class F>
+ Flag(const char* name, const char* desc, T value, const std::map<T, std::string>& valid_values, F callback)
+ : value_(value), name_(name)
+ {
+ simgrid::config::bind_flag(value_, name, desc, std::move(valid_values), std::move(callback));
+ }
+
+ /* A constructor with everything */
+ template <class F>
+ Flag(const char* name, std::initializer_list<const char*> aliases, const char* desc, T value,
+ const std::map<T, std::string>& valid_values, F callback)
+ : value_(value), name_(name)
+ {
+ simgrid::config::bind_flag(value_, name, aliases, desc, valid_values, std::move(callback));