OpenSceneGraph/doc/doc++/osgGA/CmdLineArgs.html

98 lines
2.9 KiB
HTML
Raw Normal View History

2002-08-29 22:39:41 +08:00
<!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>