<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[TCLAP: mehrere optionale UnlabeledValueArgs]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich benutze TCLAP, um die Kommandozeilenargumente zu parsen.<br />
Dabei ist der Syntax meines Programms in etwa folgendermaßen:</p>
<pre><code>prog &lt;operation&gt; &lt;file&gt; &lt;args&gt;
</code></pre>
<pre><code>operation
</code></pre>
<p>gibt die Art der Aktion an(z.b. auflisten, editieren etc)<br />
Dazu muss eine Datei angegeben werden, allerdings nicht bei allen Aktionen.<br />
Außerdem müssen für einige Aktionen zusätzliche Argumente angegeben werden.</p>
<p>Das alles sollen aber Argumente sein, keine Optionen (also ohne - bzw. --)<br />
Optionen kommen noch dazu.</p>
<p>Das ganze löse ich momentan so:</p>
<pre><code>CmdLine cmd(&quot;list&quot;, ' ', &quot;1.0&quot;);
UnlabeledValueArg&lt;std::string&gt; op(&quot;operation&quot;,&quot;specifies the operation&quot;, true, &quot;list&quot;, &quot;operation&quot;);
cmd.add(op);

UnlabeledValueArg&lt;std::string&gt; name(&quot;list&quot;, &quot;specifies the list&quot;, true, &quot;&quot;, &quot;list&quot;);
cmd.add(name);

UnlabeledMultiArg&lt;std::string&gt; args(&quot;args&quot;, &quot;arguments for add, create and delete&quot;, false, &quot;arguments&quot;);
cmd.add(args);

cmd.parse(argc, argv);

// ...

if(operation == &quot;list&quot;)
// ...
if(operation == &quot;create&quot;) 
// usw.
</code></pre>
<p>Das funktioniert eigentlich ganz gut, das Problem hierbei ist aber, dass ich den Namen der Liste immer angeben muss. Macht man das nicht, gibts einen Parse-Error, obwohl der Syntax eigentlich richtig wäre.</p>
<p>Ich kann das Argument</p>
<pre><code>name
</code></pre>
<p>leider nicht optional machen, da:</p>
<pre><code>error: You can't specify ANY Unlabeled Arg following an optional Unlabeled Arg for arg error: You can't specify ANY Unlabeled Arg following an optional Unlabeled Arg for arg Argument: (--args)
</code></pre>
<p>Hat jemand eine Idee, wie ich das umgehen kann? Ich bin auch offen für andere Bibliotheken, diese wären mir auch lieber, als alles selbst zu schreiben.<br />
Boost::program_options hatte ich mir angesehen, ich habs aber nicht ganz verstanden. Ich hatte das Gefühl, da wird es schwieriger, Argumente ohne - bzw. -- umzusetzen. Korrigiert mich, falls ich mich täusche.</p>
<p>Zusammendfassend: Was ist eine gute Möglichkeit, oben beschriebenes Programm mit Argumenten zu parsen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/321782/tclap-mehrere-optionale-unlabeledvalueargs</link><generator>RSS for Node</generator><lastBuildDate>Sun, 19 Jul 2026 01:20:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321782.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 24 Nov 2013 09:41:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to TCLAP: mehrere optionale UnlabeledValueArgs on Sun, 24 Nov 2013 09:41:05 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich benutze TCLAP, um die Kommandozeilenargumente zu parsen.<br />
Dabei ist der Syntax meines Programms in etwa folgendermaßen:</p>
<pre><code>prog &lt;operation&gt; &lt;file&gt; &lt;args&gt;
</code></pre>
<pre><code>operation
</code></pre>
<p>gibt die Art der Aktion an(z.b. auflisten, editieren etc)<br />
Dazu muss eine Datei angegeben werden, allerdings nicht bei allen Aktionen.<br />
Außerdem müssen für einige Aktionen zusätzliche Argumente angegeben werden.</p>
<p>Das alles sollen aber Argumente sein, keine Optionen (also ohne - bzw. --)<br />
Optionen kommen noch dazu.</p>
<p>Das ganze löse ich momentan so:</p>
<pre><code>CmdLine cmd(&quot;list&quot;, ' ', &quot;1.0&quot;);
UnlabeledValueArg&lt;std::string&gt; op(&quot;operation&quot;,&quot;specifies the operation&quot;, true, &quot;list&quot;, &quot;operation&quot;);
cmd.add(op);

UnlabeledValueArg&lt;std::string&gt; name(&quot;list&quot;, &quot;specifies the list&quot;, true, &quot;&quot;, &quot;list&quot;);
cmd.add(name);

UnlabeledMultiArg&lt;std::string&gt; args(&quot;args&quot;, &quot;arguments for add, create and delete&quot;, false, &quot;arguments&quot;);
cmd.add(args);

cmd.parse(argc, argv);

// ...

if(operation == &quot;list&quot;)
// ...
if(operation == &quot;create&quot;) 
// usw.
</code></pre>
<p>Das funktioniert eigentlich ganz gut, das Problem hierbei ist aber, dass ich den Namen der Liste immer angeben muss. Macht man das nicht, gibts einen Parse-Error, obwohl der Syntax eigentlich richtig wäre.</p>
<p>Ich kann das Argument</p>
<pre><code>name
</code></pre>
<p>leider nicht optional machen, da:</p>
<pre><code>error: You can't specify ANY Unlabeled Arg following an optional Unlabeled Arg for arg error: You can't specify ANY Unlabeled Arg following an optional Unlabeled Arg for arg Argument: (--args)
</code></pre>
<p>Hat jemand eine Idee, wie ich das umgehen kann? Ich bin auch offen für andere Bibliotheken, diese wären mir auch lieber, als alles selbst zu schreiben.<br />
Boost::program_options hatte ich mir angesehen, ich habs aber nicht ganz verstanden. Ich hatte das Gefühl, da wird es schwieriger, Argumente ohne - bzw. -- umzusetzen. Korrigiert mich, falls ich mich täusche.</p>
<p>Zusammendfassend: Was ist eine gute Möglichkeit, oben beschriebenes Programm mit Argumenten zu parsen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2367564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2367564</guid><dc:creator><![CDATA[Hyde++ 0]]></dc:creator><pubDate>Sun, 24 Nov 2013 09:41:05 GMT</pubDate></item></channel></rss>