पहले भाग के लिए, यह
namespace po = boost::program_options;
po::option_descriptions desc("");
desc.add_options()
("opt", po::value<std::vector<int> >()->multitoken(), "description");
दूसरे भाग काम करना चाहिए, में कुछ अधिक परिश्रम की आवश्यकता है। समारोह po::value
एक po::typed_value< T, charT >
जिस पर आप कई कार्यों के व्यवहार को ओवरराइड करना होगा देता है, इस प्रकार
template< typename T, typename charT = char >
class fixed_tokens_typed_value : public po::typed_value< T, charT > {
unsigned _min, _max;
typedef po::typed_value< T, charT > base;
public:
fixed_tokens_typed_value(T * t, unsigned min, unsigned max)
: _min(min), _max(max), base(t) {
base::multitoken();
}
virtual multi_typed_value* min_tokens(unsigned min) {
_min = min;
return *this;
}
unsigned min_tokens() const {return _min;}
virtual multi_typed_value* max_tokens(unsigned max) {
_max = max;
return *this;
}
unsigned max_tokens() const {return _max;}
base* zero_tokens() {
_min = _max = 0;
base::zero_tokens();
return *this;
}
}
जो जरूरत
template< typename T >
fixed_tokens_typed_value<T>
fixed_tokens_value(unsigned min, unsigned max) {
return fixed_tokens_typed_value<T>(0, min, max); }
template< typename T >
fixed_tokens_typed_value<T>
fixed_tokens_value(T * t, unsigned min, unsigned max) {
fixed_tokens_typed_value<T>* r = new
fixed_tokens_typed_value<T>(t, min, max);
return r; }
फिर
desc.add_options()
("opt", po::fixed_tokens_value<std::vector<int> >(2,2), "description");
के साथ होना कार्य करना चाहिए। मुझे अभी तक इसका परीक्षण करने का मौका नहीं मिला है, इसलिए इसमें कुछ बग शामिल हैं। लेकिन, कम से कम, आपको जो चाहिए उसे एक विचार देना चाहिए।
@Szabolcs, इस के साथ एक दिलचस्प बात: rcollyer के उदाहरण से
कोड यह है कि इसे डिफ़ॉल्ट रूप से वैक्टरों के उपयोग की आवश्यकता होगी। अन्यथा, आप मूल्यों को कैसे स्टोर करने जा रहे हैं? तो, मुझे लगता है कि 'po :: typed_value < T, charT > 'को' po :: typed_value, charT> 'में बदला जाना चाहिए। –
rcollyer
क्या यह वैक्टर की बजाय 'std :: array' या 'std :: सूचियों के लिए भी काम करता है? – einpoklum
@inpoklum मैं नहीं देखता क्यों नहीं। लेकिन, मुझे लगता है कि 'std :: array' थोड़ा मुश्किल होगा क्योंकि मुझे नहीं पता कि कंटेनर में डालने के लिए क्या उपयोग किया जाता है, हालांकि यह संभवतः कॉन्फ़िगर करने योग्य है, और इसके निश्चित आकार को कुछ अनुकूलन की आवश्यकता होगी। इसके विपरीत, 'std :: list' में उन सीमाएं नहीं हैं, इसलिए मुझे संदेह है कि आप इसे प्रतिस्थापन में ड्रॉप के रूप में उपयोग कर सकते हैं। – rcollyer