#include "tclap/CmdLine.h" #include #include using namespace TCLAP; using namespace std; string _orTest; string _orTest2; string _testc; bool _testd; void parseOptions(int argc, char** argv); int main(int argc, char** argv) { parseOptions(argc,argv); cout << "for A OR B we got : " << _orTest<< endl << "for string C we got : " << _testc << endl << "for string D we got : " << _testd << endl << "for E or F or G we got: " << _orTest2 << endl; } void parseOptions(int argc, char** argv) { try { CmdLine cmd("this is a message", ' ', "0.99" ); // // Define arguments // ValueArg atest("a", "aaa", "or test a", true, "homer", "string"); ValueArg btest("b", "bbb", "or test b", true, "homer", "string"); cmd.xorAdd( atest, btest ); ValueArg ctest("c", "ccc", "c test", true, "homer", "string"); cmd.add( ctest ); SwitchArg dtest("", "ddd", "d test", false); cmd.add( dtest ); ValueArg etest("", "eee", "e test", false, "homer", "string"); ValueArg ftest("", "fff", "f test", false, "homer", "string"); ValueArg gtest("g", "ggg", "g test", false, "homer", "string"); vector xorlist; xorlist.push_back(&etest); xorlist.push_back(&ftest); xorlist.push_back(>est); cmd.xorAdd( xorlist ); MultiArg itest("i", "iii", "or test i", true, "string"); MultiArg jtest("j", "jjj", "or test j", true, "string"); cmd.xorAdd( itest, jtest ); // // Parse the command line. // cmd.parse(argc,argv); // // Set variables // if ( atest.isSet() ) _orTest = atest.getValue(); else if ( btest.isSet() ) _orTest = btest.getValue(); else // Should never get here because TCLAP will note that one of the // required args above has not been set. throw("very bad things..."); _testc = ctest.getValue(); _testd = dtest.getValue(); if ( etest.isSet() ) _orTest2 = etest.getValue(); else if ( ftest.isSet() ) _orTest2 = ftest.getValue(); else if ( gtest.isSet() ) _orTest2 = gtest.getValue(); else throw("still bad"); if ( jtest.isSet() ) { cout << "for J:" << endl; vector v = jtest.getValue(); for ( int z = 0; static_cast(z) < v.size(); z++ ) cout << " " << z << " " << v[z] << endl; } else if ( itest.isSet() ) { cout << "for I:" << endl; vector v = itest.getValue(); for ( int z = 0; static_cast(z) < v.size(); z++ ) cout << " " << z << " " << v[z] << endl; } else throw("yup, still bad"); } catch ( ArgException& e ) { cout << "ERROR: " << e.error() << " " << e.argId() << endl; } }