Realmente un método simple consiste en escanear "clave = valor" args,
los pusieron en una mesa dicen zz.map: QString -> QVariant,
y obtener sus valores con zz.map.value (clave, defecto). Un ejemplo:
#include "ztest.h"
Ztest zz;
int main(int argc, char* argv[])
{
zz.eqargs(++ argv); // scan test=2 x=str ... to zz.map
QString xx = zz.map.value("xx", "");
if(Zint(Size, 10)) // a #def -> zz.map.value("Size", 10)
...
ztest.h
es < 1 página, a continuación; lo mismo para Python ~ 10 líneas.
(Todo el mundo tiene su analizador de opciones favoritas; esta es la más simple.
vale la pena repetir: sin embargo se especifican opciones, ellos eco a los archivos de salida -
"todos los científicos que conozco tiene problemas para hacer el seguimiento de qué parámetros se utilizan última vez que corrió un script")
To. hacer que QPoints funcione, por supuesto, uno necesita un QString -> QPoint parser. ¿Alguien sabe por qué esto no funciona (en Qt 4.4.3)?
QPoint pt(0,0);
QDataStream s("QPoint(1,2)");
s >> pt;
qDebug() << "pt:" << pt; // QPoint(1364225897,1853106225) ??
Agregado 25nov -
// ztest.h: scan args x=2 s=str ... to a key -> string table
// usage:
// Ztest ztest;
// int main(int argc, char* argv[])
// {
// QApplication app(argc, argv);
// ztest.eqargs(++ argv); // scan leading args name=value ...
// int x = Zint(x, 10); // arg x= or default 10
// qreal ff = Zreal(ff, 3.14);
// QString s = Zstr(s, "default");
// care: int misspelled = Zint(misspellled) -- you lose
//version: 2009-06-09 jun denis
#ifndef ztest_h
#define ztest_h
#include <QHash>
#include <QString>
#include <QVariant>
#include <QRegExp>
//------------------------------------------------------------------------------
class Ztest {
public:
QHash< QString, QVariant > map;
int test; // arg test=num, if(ztest.test)
Ztest() : test(0) {}
QVariant val(const QString& key, const QVariant& default_ = 0)
{
return map.value(key, default_);
}
void setval(const QString& key, const QVariant& val)
{
map[key] = val;
if(key == "test" || key == "Test")
test = val.toInt();
}
//------------------------------------------------------------------------------
// ztest.eqargs(++ argv) scans test=2 x=3 ... -> ztest table
void eqargs(char** argv)
{
char** argv0 = argv;
char *arg;
QRegExp re("(\\w+)=(.*)"); // name= anything, but not ./file=name
for(; (arg = *argv) && re.exactMatch(arg); argv ++){
setval(re.cap(1), re.cap(2));
}
// change argv[0..] -> args after all name=values
while((*argv0++ = *argv++) != 0) {}
}
};
extern Ztest ztest;
// macros: int x = Zint(x, 10): x= arg or default 10
#define Zstr(key, default) ztest.val(#key, default).toString()
#define Zint(key, default) ztest.val(#key, default).toInt()
#define Zreal(key, default) ztest.val(#key, default).toDouble()
#endif
Para aquellos (como yo) que todavía están en Qt4, la biblioteca frológica se puede obtener utilizando la máquina Wayback de Internet Archive. La licencia en el código frologic es una licencia de estilo BSD de 3 cláusulas, por lo que la mayoría puede usar el código. –