namespace simgrid {
namespace config {
-class XBT_PUBLIC missing_key_error : public std::runtime_error {
-public:
- explicit missing_key_error(const std::string& what)
- : std::runtime_error(what) {}
- explicit missing_key_error(const char* what)
- : std::runtime_error(what) {}
- ~missing_key_error() override;
-};
-
template<class T> inline
std::string to_string(T&& value)
{
* </code></pre>
*/
// F is a checker, F : T& -> ()
-template<class T, class F>
-typename std::enable_if<std::is_same<
- void,
- decltype( std::declval<F>()(std::declval<const T&>()) )
->::value, void>::type
-bindFlag(T& value, std::initializer_list<const char*> names, const char* description,
- F callback)
+template <class T, class F>
+typename std::enable_if<std::is_same<void, decltype(std::declval<F>()(std::declval<const T&>()))>::value, void>::type
+bindFlag(T& value, const char* name, const char* description, F callback)
{
- bindFlag(value, *names.begin(), description);
- alias(names);
+ declareFlag(name, description, value, std::function<void(const T&)>([&value, callback](const T& val) {
+ callback(val);
+ value = std::move(val);
+ }));
}
-template<class T, class F>
-typename std::enable_if<std::is_same<
- void,
- decltype( std::declval<F>()(std::declval<const T&>()) )
->::value, void>::type
-bindFlag(T& value, const char* name, const char* description,
- F callback)
+template <class T, class F>
+typename std::enable_if<std::is_same<void, decltype(std::declval<F>()(std::declval<const T&>()))>::value, void>::type
+bindFlag(T& value, std::initializer_list<const char*> names, const char* description, F callback)
{
- declareFlag(name, description, value,
- std::function<void(const T&)>([&value,callback](const T& val) {
- callback(val);
- value = std::move(val);
- }
- ));
+ bindFlag(value, *names.begin(), description, std::move(callback));
+ alias(names);
}
+
template <class T, class F>
typename std::enable_if<std::is_same<void, decltype(std::declval<F>()(std::declval<const T&>()))>::value, void>::type
bindFlag(T& value, const char* name, const char* description, std::map<T, std::string> valid_values, F callback)
simgrid::config::bindFlag(value_, name, desc);
}
+ /** Constructor taking an array of aliases as name */
+ Flag(std::initializer_list<const char*> names, const char* desc, T value) : value_(value)
+ {
+ simgrid::config::bindFlag(value_, names, 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.
*/