• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

element listy STL jako parametr switch + wskaźnik na funkcje

Object Storage Arubacloud
0 głosów
379 wizyt
pytanie zadane 30 maja 2016 w C i C++ przez MeowingtonsPHD Nowicjusz (140 p.)

Tak jak w pytaniu czy istnieje jakaś możliwość przekazania wartości elementu listy (char) jako argumentu do switch case? 

A drugi problem to wskaźniki do funkcji. Alternatywą (jeśli nie da się przekazać elementu listy do switcha) byłoby przekazanie wskaźnika do funkcji jako elementu listy. 
Problem do rozwiązania jest następujący: muszę stworzyć listę metod które potrzebuje potem otworzyć zgodnie z kolejnością argumentów podanych przy wywołaniu programu. Podaje tu okrojony kod (orientacyjnie) żeby było wiadomo o co mi dokładnie chodzi. Ale nie wiem czy jest to dobre rozwiązanie. Bardzo dziękuję za wszelką pomoc :)

int main(int argc, char * argv[])
{
    list<char> lista;
    while(i<argc)
        {
            if (argv[i][0] == '-' )
            {
                switch (argv[i][1])
                {
                    case 'i':
                    {
                        /* wczytuje nazwe pliku z danymi */
                    }
                    case 'o':
                    {
                        /* wczytuje nazwe pliku do zapisu */
                    }
                    case 'G':
                    {
                        //funkcja z wywolaniem
                        oper = argv[i][1];
                        lista.push_back(oper);
                        i++;
                    }
                  /* ... dalej jeszcze kilka innych parametrow ... */
                    }
            else
                    {cout << "Błędne wywołanie\n\n";exit(1);}
            }
            /* teraz wywołuje liste z parametrami */
             for(list<char>::iterator list_iter = lista.begin(); list_iter != lista.end(); list_iter++)
             {
             cout<<&*list_iter<<endl;
                 /* w tym miejscu chciałem żeby wywołała się też odpowiednia funkcja 
                    przypisana do parametru */
             }
            
        }
}

 

1 odpowiedź

0 głosów
odpowiedź 30 maja 2016 przez criss Mędrzec (172,590 p.)
edycja 31 maja 2016 przez criss

Jeśli i tak mają się odpalać w kolejności podanej przy wywołaniu programu, to po co to wrzucać do jakiegoś kontenera? Ja bym zrobił sobie mape z kluczem char (reprezentujacym opcje programu) i funkcją mu odpowiadającą jako "mapowany typ". Np.:

std::map<char, std::function<void()>> m;

m['a'] = []() { ... }; 
...
/* przypisywanie opcjom odpowiadającym im funkcji */

while(i < argc)
{
    if(argv[i][0] == '-')
       m[argv[i][1]]();
    i++;
}

 

Podobne pytania

0 głosów
2 odpowiedzi 213 wizyt
pytanie zadane 13 stycznia 2017 w C i C++ przez czujek22 Dyskutant (7,670 p.)
0 głosów
1 odpowiedź 388 wizyt
pytanie zadane 29 marca 2017 w C i C++ przez krzakurts Obywatel (1,470 p.)
0 głosów
1 odpowiedź 501 wizyt
pytanie zadane 27 marca 2017 w C i C++ przez krzakurts Obywatel (1,470 p.)

92,696 zapytań

141,607 odpowiedzi

320,114 komentarzy

62,056 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...