Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: Projekte ::  Projektvorstellung: ProgramOptions.hxx     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Fytch
Mitglied

Benutzerprofil
Anmeldungsdatum: 13.12.2013
Beiträge: 821
Beitrag Fytch Mitglied 14:18:26 25.03.2017   Titel:   Projektvorstellung: ProgramOptions.hxx            Zitieren

Hallo

Ich möchte meine kleine singe-header Bibliothek ProgramOptions.hxx vorstellen. Sie ist komplett in C++11 geschrieben.

Mein Ziel war es, einen kleinen aber feinen Programmoptionen-Parser zu schreiben, der sich elegant und modern anfühlt, aber gleichzeitig keinerlei Änderungen am Build-Prozess erfordert. Die Parser-Klasse fühlt sich wie die altbekannte std::map an und die Optionen lassen sich bequem mit verketteten Funktionsaufrufen konfigurieren. Die Defaults sind sinnvoll gewählt und erlauben es, direkt loszulegen. Hinweise zur Benutzung und alles andere Wichtige steht im README auf GitHub. :)

GitHub Repo: https://github.com/Fytch/ProgramOptions.hxx

Über Anregungen, Rückmeldung, Kritik und Feature Requests, hier oder auf GitHub, würde ich mich sehr freuen.

LG
5cript
Mitglied

Benutzerprofil
Anmeldungsdatum: 14.03.2009
Beiträge: 1975
Beitrag 5cript Mitglied 03:10:00 28.03.2017   Titel:              Zitieren

Sieht hübscher aus als boost::program_options. (EDIT: Also im Ernst, ich schätze Interfaces, die so einfach, simpel, selbsterklärend und ästhetisch sind, dass man gar nichts falsch machen kann. Und zwar fast über alles.)
Werde ich wohl das nächste Mal verwenden, sobald ich Parameter definiere.

(EDIT: Und die saubere Readme :live:)

_________________
http://assets.amuniversal ....... 067f90134cb84005056a9545d


Zuletzt bearbeitet von 5cript am 03:21:49 28.03.2017, insgesamt 3-mal bearbeitet
Andromeda
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.12.2006
Beiträge: 2021
Beitrag Andromeda Mitglied 03:57:37 28.03.2017   Titel:              Zitieren

Ich finde es befremdlich, wenn man das Rad immer wieder neu erfindet.

Wäre es nicht besser, sich an der Weiterentwicklung von https://www.gnu.org/softw ....... ual/html_node/Getopt.html zu beteiligen?

_________________
My Browser User Agent String is Mozilla/5.0 (X11; SunOS i86pc; rv:10.0.6) Gecko/20100101 Firefox/10.0.6
Techel
Mitglied

Benutzerprofil
Anmeldungsdatum: 19.09.2015
Beiträge: 805
Beitrag Techel Mitglied 06:47:16 28.03.2017   Titel:   Techel            Zitieren

Find ich Klasse, ganz ohne Boost :live:
@Andromeda: Getopt ist, so wie ich das sehe, in C geschrieben.
Andromeda
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.12.2006
Beiträge: 2021
Beitrag Andromeda Mitglied 10:02:42 28.03.2017   Titel:   Re: Techel            Zitieren

Techel schrieb:

@Andromeda: Getopt ist, so wie ich das sehe, in C geschrieben.

Kann aber auch in C++ verwendet werden.

_________________
My Browser User Agent String is Mozilla/5.0 (X11; SunOS i86pc; rv:10.0.6) Gecko/20100101 Firefox/10.0.6
Techel
Mitglied

Benutzerprofil
Anmeldungsdatum: 19.09.2015
Beiträge: 805
Beitrag Techel Mitglied 11:21:42 28.03.2017   Titel:              Zitieren

Sicher, sieht aber mega hässlich aus.
Andromeda
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.12.2006
Beiträge: 2021
Beitrag Andromeda Mitglied 11:40:36 28.03.2017   Titel:              Zitieren

Techel schrieb:
Sicher, sieht aber mega hässlich aus.


Nein, C ist eine schöne Sprache. Das liegt in ihrer Philosophie begründet:
Code:
    Trust the programmer.
    Don’t prevent the programmer from doing what needs to be done.
    Keep the language small and simple.
    Provide only one way to do an operation.
    Make it fast, even if it is not guaranteed to be portable.

_________________
My Browser User Agent String is Mozilla/5.0 (X11; SunOS i86pc; rv:10.0.6) Gecko/20100101 Firefox/10.0.6
Fytch
Mitglied

Benutzerprofil
Anmeldungsdatum: 13.12.2013
Beiträge: 821
Beitrag Fytch Mitglied 12:05:36 28.03.2017   Titel:              Zitieren

Hallo.

Danke für die zahlreiche Rückmeldung, freut mich sehr.

@Andromeda: Danke für den Link, die Bibliothek war mir neu. Ich habe das Beispiel von ihrer Webseite mit meiner Bibliothek nachgebaut:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
 
int
main (int argc, char **argv)
{
  int aflag = 0;
  int bflag = 0;
  char *cvalue = NULL;
  int index;
  int c;
 
  opterr = 0;
 
 
  while ((c = getopt (argc, argv, "abc:")) != -1)
    switch (c)
      {
      case 'a':
        aflag = 1;
        break;
      case 'b':
        bflag = 1;
        break;
      case 'c':
        cvalue = optarg;
        break;
      case '?':
        if (optopt == 'c')
          fprintf (stderr, "Option -%c requires an argument.\n", optopt);
        else if (isprint (optopt))
          fprintf (stderr, "Unknown option `-%c'.\n", optopt);
        else
          fprintf (stderr,
                   "Unknown option character `\\x%x'.\n",
                   optopt);
        return 1;
      default:
        abort ();
      }
 
 
  printf ("aflag = %d, bflag = %d, cvalue = %s\n",
          aflag, bflag, cvalue);
 
  for (index = optind; index < argc; index++)
    printf ("Non-option argument %s\n", argv[index]);
  return 0;
}

Wird zu:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <ProgramOptions.hxx>
#include <iostream>
 
int main( int argc, char** argv ) {
    po::parser parser;
 
    auto&& a = parser[ "a" ];
    auto&& b = parser[ "b" ];
    auto&& c = parser[ "c" ]
        .type( po::string )
        .fallback( "(null)" );
    auto&& unnamed = parser[ "" ]
        .type( po::string )
        .multi();
 
    parser( argc, argv );
 
    std::cout << "aflag = " << a.was_set() << ", ";
    std::cout << "bflag = " << b.was_set() << ", ";
    std::cout << "cflag = " << c.get().string << '\n';
    for( auto&& i : unnamed )
        std::cout << "Non-option argument " << i.string << '\n';
}
Was ist nun schöner resp. leserlicher? Ihr entscheidet. ;)

LG
Artchi
Autor

Benutzerprofil
Anmeldungsdatum: 16.03.2002
Beiträge: 9102
Beitrag Artchi Autor 13:14:03 28.03.2017   Titel:              Zitieren

Erstmal finde ich ProgramOptions.hxx gelungener als GNUs Getopt. :live:

Zweitens würde ich auf Angriffe aus dem C-Lager nicht reagieren. Macht keinen Sinn mit denen zu diskutieren.

_________________
http://www.kharchi.eu


Zuletzt bearbeitet von Artchi am 13:15:18 28.03.2017, insgesamt 1-mal bearbeitet
TdZ
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.07.2007
Beiträge: 250
Beitrag TdZ Mitglied 00:33:37 10.05.2017   Titel:              Zitieren

Ich möchte auch beipflichten, dass deine API sehr schön aussieht und nehme mit Freuden zur Kenntnis, dass du auch Features jüngerer Generation verwendest (siehe rvalue references).

Den C-Fanboys würde ich nun auch wenig Aufmerksamkeit schenken. Nicht, dass ich was gegen C hätte (im Gegenteil), aber ich hab was gegen blinden Fanatismus.

Summa summarum: Weiter so, würde deine Implementierung auch gern bei nächster Gelegenheit einsetzen! :)

_________________
A picture is worth 0x100000 DWORDs.
C++ Forum :: Projekte ::  Projektvorstellung: ProgramOptions.hxx   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum nicht antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.