namespace detail {
-#ifndef DOXYGEN
+ /** \brief Internal: Argument information structure
+
+ This class is used to hold argument information for automatically parsed commands.
+ \see ParsedCommandOverloadBase
+ */
struct ArgumentInfoBase
: public intrusive_refcount
{
std::string doc;
ArgumentInfoBase(std::string const & type);
+ virtual ~ArgumentInfoBase();
virtual std::string defaultValueStr() const = 0;
};
+ /** \brief Internal: Argument information structure
+
+ This class is used to hold argument information for automatically parsed commands.
+
+ \see ParsedCommandOverloadBase
+ */
template <class ParameterType>
struct ArgumentInfo
: public ArgumentInfoBase
virtual std::string defaultValueStr() const;
};
+#ifndef DOXYGEN
+
// FirstArgType returns void, if the function has no arguments, otherwise it returns arg1_type
template <class Traits, bool flag=(Traits::arity>0)>
typedef typename Traits::arg1_type type;
};
- template <class Function, bool isFN=senf::is_any_function<Function>::value>
- struct ParsedCommandTraits
+ template <class FnunctionP, class Function, bool isFN=boost::is_function<Function>::value>
+ struct ParsedCommandTraits_i
{};
- template <class Fn>
- struct ParsedCommandTraits<Fn, true>
+ template <class FunctionP, class Function>
+ struct ParsedCommandTraits_i<FunctionP, Function, true>
{
- typedef Fn base_type;
+ typedef FunctionP base_type;
typedef typename senf::remove_any_pointer<base_type>::type function_type;
typedef boost::function_traits<function_type> base_traits;
typedef typename FirstArgType<base_traits>::type first_arg_type;
typedef ParsedArgumentAttributor<Overload> Attributor;
};
+ // Disable auto-parsing for ParseCommandInfo arg -> register manually parsed command
+ template <class FunctionP>
+ struct ParsedCommandTraits_i<FunctionP, void (std::ostream &, ParseCommandInfo const &), true>
+ {};
+
+ template <class FunctionP>
+ struct ParsedCommandTraits
+ : public ParsedCommandTraits_i< FunctionP,
+ typename senf::remove_any_pointer<FunctionP>::type >
+ {};
+
struct ParsedCommandAddNodeAccess;
#endif