mboost-dp1
C++ Argument liste
- Forside
- ⟨
- Forum
- ⟨
- Programmering
Hej. Sad lige og kogede lidt. Jeg har i lang tid kunnet tænke mig at have argumenterne fra et program i et bedre format, fordi char osv. er ikke særligt rart at lege med.
Men jeg ved ikke om dette er en god idé. Jeg kan snildt se et problem; andre klasser der skal bruge argumenterne, skal inkludere strukturen. Det kan jo selvfølgelig nemt gøres, men det er måske lidt for bøvlet så. Alternativt kan man lave en vector i main, men jeg syntes bare det er lidt rodet og ikke særligt genbrugeligt. (Det er også rart at man kan stole på at std::vector klare fejl mv.)
Så har lavet en klasse (struct fordi den kun er public) der blot tager imod argc og argv, og så ellers opfører sig som en vector container. Tænkte på list, men det er vel rart med lidt random access. Er ikke helt sikker; er list bedre? Det er jo potentielt farligt med random access. (Så sparer man også lidt hukommelse)
Og til slut; skal man bare nøjes med det gamle C? Tænker her især på når man skal bruge argumenter i andre classes; de kan jo risikerer at skulle blive sendt rundt en del.
Men jeg ved ikke om dette er en god idé. Jeg kan snildt se et problem; andre klasser der skal bruge argumenterne, skal inkludere strukturen. Det kan jo selvfølgelig nemt gøres, men det er måske lidt for bøvlet så. Alternativt kan man lave en vector i main, men jeg syntes bare det er lidt rodet og ikke særligt genbrugeligt. (Det er også rart at man kan stole på at std::vector klare fejl mv.)
Så har lavet en klasse (struct fordi den kun er public) der blot tager imod argc og argv, og så ellers opfører sig som en vector container. Tænkte på list, men det er vel rart med lidt random access. Er ikke helt sikker; er list bedre? Det er jo potentielt farligt med random access. (Så sparer man også lidt hukommelse)
Og til slut; skal man bare nøjes med det gamle C? Tænker her især på når man skal bruge argumenter i andre classes; de kan jo risikerer at skulle blive sendt rundt en del.
// arguments.h
#include <algorithm>
#include <vector>
#include <string>
struct arguments : public std::vector<std::string> {
arguments(const int &c, char **v) {
this->reserve(c);
for (int i = 0; i < c; i++)
this->push_back(std::string(v[i]));
}
bool exists(const std::string &s) {
return std::binary_search(this->begin(), this->end(), s);
}
};
#include <iostream>
#include "arguments.h"
int main(int argc, char **argv) {
arguments arg(argc, argv);
for (arguments::iterator i = arg.begin(); i != arg.end(); ++i)
std::cout << *i << std::endl;
if (arg.exists("hello"))
std::cout << "User said hello." << std::endl;
return EXIT_SUCCESS;
}
#3 Jeg startede med aggregation, men så skal jeg skrive en del metoder for at den bliver brugbar; her er fordelen jo at man kan bruge iteratorer og diverse algoritmer, fordi den har en STL container som superklasse.
Getopt lyder interessant, den kendte jeg ikke. Men har heller ikke brugt særligt meget GNU. Jeg ved at win32 kan det samme. Der er dog problemer med compiler og library understøttelse går jeg ud fra.
Angående binary_seach så kan jeg jo ikke sortere dataen, fordi det er vigtigt at rækkefølgen på argumenter vedligeholdes. Den har bare en lineær kompleksitet her, hvilket vel er okay da antallet af argumenter aldrig er særligt store.
Getopt lyder interessant, den kendte jeg ikke. Men har heller ikke brugt særligt meget GNU. Jeg ved at win32 kan det samme. Der er dog problemer med compiler og library understøttelse går jeg ud fra.
Angående binary_seach så kan jeg jo ikke sortere dataen, fordi det er vigtigt at rækkefølgen på argumenter vedligeholdes. Den har bare en lineær kompleksitet her, hvilket vel er okay da antallet af argumenter aldrig er særligt store.
ipwn (4) skrev:Angående binary_seach så kan jeg jo ikke sortere dataen, fordi det er vigtigt at rækkefølgen på argumenter vedligeholdes.
God pointe.
ipwn (4) skrev:Den har bare en lineær kompleksitet her, hvilket vel er okay da antallet af argumenter aldrig er særligt store.
Binary search virker ikke på usorteret data, så du skal bruge en anden metode. F.eks. find.
ipwn (4) skrev:Getopt lyder interessant, den kendte jeg ikke. Men har heller ikke brugt særligt meget GNU. Jeg ved at win32 kan det samme. Der er dog problemer med compiler og library understøttelse går jeg ud fra.
http://www.codeproject.com/KB/cpp/xgetopt.aspx
ipwn (4) skrev:Jeg startede med aggregation, men så skal jeg skrive en del metoder for at den bliver brugbar; her er fordelen jo at man kan bruge iteratorer og diverse algoritmer, fordi den har en STL container som superklasse.
Det er netop al den funktionalitet der kommer med vector som er problemet.
En vector er mutable. Jeg vil mene at arguments klassen skal være immutable for at være en god OOP model af argumenterne.
Det er bedre at delegate den smule funktionalitet du skal bruge.
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.