Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Terminal, map, funkje

Ostatnio zmodyfikowano 2016-11-17 17:30
Autor Wiadomość
Wasyl
Temat założony przez niniejszego użytkownika
Terminal, map, funkje
» 2016-11-17 06:29:58
mam kod:

C/C++
#include<iostream>
#include<map>
using namespace std;

int nd()
{
    cout << "niedziela :D|||";
}
int pon()
{
    cout << "poniedzialek :P|||";
}
int wt()
{
    cout << "wtorek :C|||";
}

int main()
{
    string x;
   
    map < string, int > komenda;
    komenda[ "nd" ] = nd();
    komenda[ "pon" ] = pon();
    komenda[ "wt" ] = wt();
   
    cout << "Wpisz komende: ";
    cin >> x;
   
    cout << komenda[ x ];
   
    return 0;
}


Gdzie jak uruchamiam program pojawia sie zawartosc funkcji (int nd.. pon... wt) :(
A po wpisaniu 'komendy" wywala tylko taką liczbe "4766016"...

Jak naprawić "program" który nie bedzie wypluwał zawatrosci funkcji od razu i po wpisaniu "komendy" powinien wyswietlic poprawna zawatrosc funkcji ?
P-153814
karambaHZP
» 2016-11-17 06:43:53
Zapisujesz adres funkcji w mapie, a jest to liczba.
Trzymaj w mapie string i wskaźnik na funkcje.
» Kurs C++ » Poziom XWskaźnik na funkcję lekcja
» Porady dla użytkowników cpp0x.plZakładanie tematów na forum zalecenie

Przykład:http://ideone.com/MNqkt9
C/C++
#include <map>
#include <string>
#include <iostream>

void pn() { std::cout << "poniedzialek\n"; }
void wt() { std::cout << "wtorek\n"; }

int main()
{
    typedef void( * fDay )();
    std::map < std::string, fDay > days;
    days[ "pn" ] = pn;
    days[ "wt" ] = wt;
   
    ( days.find( "wt" )->second )();
}
P-153815
Wasyl
Temat założony przez niniejszego użytkownika
» 2016-11-17 08:00:36
Fajnie i dziekuje bo działa ... ale tylko z wyswietlaniem tekstu, a ja chce zeby
int PrzykladowaFunkcja
 została wywołana, która cos moze zwrócić...

zmieniałem z void na int/string ale nie pozwala na to...
P-153816
karambaHZP
» 2016-11-17 08:16:56
C/C++
int add( int a, int b ) { return a + b; }
int mult( int a, int b ) { return a * b; }

int main()
{
    typedef int( * fOp )( int, int );
   
    map < char, fOp > ops;
    ops[ '+' ] = add;
    ops[ '*' ] = mult;
   
    cout << ops.find( '+' )->second( 2, 4 ) << '\n';
    cout << ops.find( '*' )->second( 3, 5 );
}
P-153818
Wasyl
Temat założony przez niniejszego użytkownika
» 2016-11-17 09:08:17
C/C++
#include <map>
#include <string>
#include <iostream>

using namespace std;

string x;
int z;

int pon( int a )
{
    cout << "poniedzialek";
}
int wt( int a )
{
    cout << "wtoreczek";
}

int main()
{
    typedef int( * fWB )( int );
   
    map < string, fWB > komenda;
    komenda[ "/pon" ] = pon;
    komenda[ "/wt" ] = wt;
   
    cin >> x;
   
    cout << komenda.find( x )->second( z );
   
    return 0;
}

jak pozbyc sie zmiennych
int a
 i
int z
 bo sa nie potrzebne.. .a (
int z
) generuja tylko zbedne liczy (chyba wartosc jakiejś komórki ramu)
(+ dodałem
int z
 by program sie odpalił)
Prosze o pomoc :)
P-153821
karambaHZP
» 2016-11-17 09:34:08
W tej sytuacji pozostaje mi polecić » Kurs C++ » Poziom 2Funkcje - pierwsze starcie lekcja
P-153823
mateczek
» 2016-11-17 09:46:27
chcesz bindowanie jak niżej ??

C/C++
#include <string>
#include <iostream>
#include <functional>

using namespace std;

string x;
int z;

void pon( int a )
{
    cout << "poniedzialek " << a << endl;
}
void wt( int a )
{
    cout << "wtoreczek " << a << endl;
}

int main()
{
   
    map < string, std::function < void() >> komenda;
    komenda[ "/pon" ] = std::bind( & pon, 1 );
    komenda[ "/wt" ] = std::bind( & wt, 2 );
   
   
    komenda[ "/pon" ]();
    komenda[ "/wt" ]();
   
    return 0;
}
P-153825
karambaHZP
» 2016-11-17 10:01:20
Fajnie i dziekuje bo działa ... ale tylko z wyswietlaniem tekstu, a ja chce zeby
int PrzykladowaFunkcja
  została wywołana, która cos moze
 zwrócić...

C/C++
int pon( int a )
{
    cout << "poniedzialek";
}

Na std::bind oraz std::function przyjdzie czas ;)
P-153827
« 1 » 2
  Strona 1 z 2 Następna strona