98 lines
2.9 KiB
HTML
98 lines
2.9 KiB
HTML
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||
|
|
||
|
<HTML>
|
||
|
<HEAD>
|
||
|
<TITLE>#define CmdLineArgs</TITLE>
|
||
|
<META NAME="GENERATOR" CONTENT="DOC++ 3.4.8">
|
||
|
</HEAD>
|
||
|
<BODY BGCOLOR="#ffffff">
|
||
|
|
||
|
<H2>#define <A HREF="#DOC.DOCU">CmdLineArgs</A></H2></H2><A NAME="DOC.DOCU"></A>
|
||
|
<BLOCKQUOTE>
|
||
|
|
||
|
<P>
|
||
|
A collection of utilities for processing command line arguments.
|
||
|
|
||
|
<P>An osgGA::CmdLineArgs::Processor class is provided, which implements a chain
|
||
|
of responsibilty for handline command line arguments. Each item in the chain
|
||
|
is a subclass of the abstract osgGA::CmdLineArgs::ArgHandler. A number
|
||
|
of ArgHandlers are provided, though the user if free to implement their
|
||
|
own subclasses for specific needs (e.g. to validate an argument which
|
||
|
takes an integer which must be in a specific range).
|
||
|
|
||
|
<P>Let's look at an example...
|
||
|
|
||
|
<P><h2>Example</h2>
|
||
|
|
||
|
<P>\code
|
||
|
|
||
|
<P>#include <osgGA/CmdLineArgs>
|
||
|
|
||
|
<P>int main(int argc, char* argv[])
|
||
|
{
|
||
|
using namespace osg;
|
||
|
using namespace osgGA::CmdLineArgs;
|
||
|
|
||
|
<P>// Create some handlers
|
||
|
ref_ptr<BoolHandler> helpSwitch(new BoolHandler("[-h]","\t\tPrint this help and exit","-h"));
|
||
|
ref_ptr<BoolHandler> verboseSwitch(new BoolHandler("[-v]","\t\tActivate verbose output","-v"));
|
||
|
ref_ptr<SwitchStringHandler> configFile(
|
||
|
new SwitchStringHandler("[-config <configfile>",
|
||
|
"\t\tSpecify a config file to load"), "-config");
|
||
|
|
||
|
<P>Processor clp;
|
||
|
clp.push_back(helpSwitch.get());
|
||
|
clp.push_back(verboseSwitch.get());
|
||
|
clp.push_back(configFile.get());
|
||
|
|
||
|
<P>try{
|
||
|
clp.process(argc,argv);
|
||
|
}
|
||
|
catch(ArgHandlerX& e){
|
||
|
cerr<<e.what()<<endl;
|
||
|
clp.printUsage(cerr);
|
||
|
exit(1);
|
||
|
}
|
||
|
catch(...){
|
||
|
cerr<<"Unknown exception caught while processing command line arguments."<<endl;
|
||
|
clp.printUsage(cerr);
|
||
|
exit(1);
|
||
|
}
|
||
|
|
||
|
<P>if(helpSwitch->wasSpecified()){
|
||
|
clp.printHelp(cerr);
|
||
|
exit(0);
|
||
|
}
|
||
|
|
||
|
<P>if(verboseSwitch->wasSpecified()){
|
||
|
// Activate verbosity...
|
||
|
}
|
||
|
|
||
|
<P>if(configFile->wasSpecified()){
|
||
|
loadConfigFile(configFile->getString());
|
||
|
}
|
||
|
|
||
|
<P>}
|
||
|
|
||
|
<P>\endcode
|
||
|
|
||
|
<P>The processor takes each argument on the command line in turn, and passes it
|
||
|
to the ArgHandler chain. Each ArgHandler is given the opportunity to handle
|
||
|
an argument and - if it requires - any subsequent arguments until the
|
||
|
end of the argument list (it can do this by incrementing the ArgIterator
|
||
|
passed to it. If an ArgHandler handles an argument (e.g. it's looking for
|
||
|
and recognises the argument '-h'), it returns true and further processing of
|
||
|
the argument stops. If an argument is not handled it is passed to the next
|
||
|
handler in the chain, and so on, until it is either handled, or it drops off
|
||
|
the end of the chain.
|
||
|
|
||
|
<P>A number of pre-written ArgHandlers are supplied. User's may use these
|
||
|
directly, may write their own, or may extend a pre-written ArgHandler to
|
||
|
customise it for their specific needs.
|
||
|
</BLOCKQUOTE>
|
||
|
<DL><DT><DD></DL><P><P><I><A HREF="index.html">Alphabetic index</A></I> <I><A HREF="HIER.html">Hierarchy of classes</A></I></P><HR>
|
||
|
<BR>
|
||
|
This page was generated with the help of <A HREF="http://docpp.sourceforge.net">DOC++</A>.
|
||
|
</BODY>
|
||
|
</HTML>
|