template <unsigned n>
detail::ArgumentInfo<typename boost::mpl::at_c<arg_types, n>::type> & arg() const;
+ void function(Function fn);
+
protected:
private:
template <unsigned n>
detail::ArgumentInfo<typename boost::mpl::at_c<arg_types, n>::type> & arg() const;
+ void function(Function fn);
+
protected:
private:
}
template <class FunctionTraits, class ReturnValue>
+void
+senf::console::ParsedCommandOverload<FunctionTraits, ReturnValue, BOOST_PP_ITERATION() >::
+function(Function fn)
+{
+ function_ = fn;
+}
+
+template <class FunctionTraits, class ReturnValue>
prefix_
senf::console::ParsedCommandOverload<FunctionTraits, ReturnValue, BOOST_PP_ITERATION()>::
ParsedCommandOverload(Function fn)
}
template <class FunctionTraits>
+void
+senf::console::ParsedCommandOverload<FunctionTraits, void, BOOST_PP_ITERATION() >::
+function(Function fn)
+{
+ function_ = fn;
+}
+
+template <class FunctionTraits>
prefix_
senf::console::ParsedCommandOverload<FunctionTraits, void, BOOST_PP_ITERATION() >::
ParsedCommandOverload(Function fn)
v_execute(std::ostream & os, ParseCommandInfo const & command)
const
{
- if ( command.arguments().size() > BOOST_PP_ITERATION() )
+ // We NEED to know the number of arguments beforehand so we can assign default values
+ // correctly ... hrmpf ...
+ unsigned nArgs ( command.arguments().size() );
+ if ( nArgs > BOOST_PP_ITERATION() )
throw SyntaxErrorException("invalid number of arguments");
- int nDefaults ( BOOST_PP_ITERATION() - command.arguments().size() );
+ int nDefaults ( BOOST_PP_ITERATION() - nArgs );
typedef typename boost::range_const_reverse_iterator<ParseCommandInfo::ArgumentsRange>::type
riterator;
v_execute(std::ostream & os, ParseCommandInfo const & command)
const
{
- if ( command.arguments().size() > BOOST_PP_ITERATION() )
+ // We NEED to know the number of arguments beforehand so we can assign default values
+ // correctly ... hrmpf ...
+ unsigned nArgs ( command.arguments().size() );
+ if ( nArgs > BOOST_PP_ITERATION() )
throw SyntaxErrorException("invalid number of arguments");
- int nDefaults ( BOOST_PP_ITERATION() - command.arguments().size() );
+ int nDefaults ( BOOST_PP_ITERATION() - nArgs );
typedef typename boost::range_const_reverse_iterator<ParseCommandInfo::ArgumentsRange>::type
riterator;