$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Fredrik Hedman (hedman_at_[hidden])
Date: 2005-08-24 05:36:09
Hello, 
 
I would like to be able to specify different sanity checks 
on the input data using the program_options framework.  This 
should be a common enough requirement, but I can not find any 
example that exactly fits the bill.  To be more specific I have a 
solution that kind of works, but I think it needs a bit to much 
typing. 
 
Here is what I have now:     
     
  /*! Check for values greater than min.   
   */ 
  template <typename T> 
  class value_gt { 
  public: 
    value_gt(std::string const & msg, T min) : msg_(msg), min_(min) {} 
    void operator()(T const & v) const { 
      if (v > min_) return; 
       
      ostringstream os; 
      os << msg_ 
         << " to small.  Must be larger than " << min_ 
         << " .  Found " << v; 
      throw pgmopt::invalid_option_value(os.str()); 
    } 
  private: 
    std::string msg_; 
    T min_; 
  }; 
 
  void doSetProgram(Options & options) 
  { 
    options.add_options() 
    ("help,h", "show this message") 
    ("density",  
      pgmopt::value<double>()->notifier( 
              value_gt<double>("density", 1.0)), 
    "initial density") 
    ("particles",  
    pgmopt::value<unsigned>()->notifier( 
            value_gt<unsigned>("particles", 100)),  
    "number of particles") 
    ; 
  }  
 
I don't like repeating the type (see code above) and would rather 
like to have access to the name of the option in the function 
that does the check.   
 
What would be a better solution?  Adding to the validators idea 
or? 
 
-- F.