Wasyl Temat założony przez niniejszego użytkownika |
Terminal, map, funkje » 2016-11-17 06:29:58 mam kod: #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 ? |
|
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. Wskaźnik na funkcjęZakładanie tematów na forumPrzykład: http://ideone.com/MNqkt9#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 )(); } |
|
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... |
|
karambaHZP |
» 2016-11-17 08:16:56 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 ); } |
|
Wasyl Temat założony przez niniejszego użytkownika |
» 2016-11-17 09:08:17 #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 :) |
|
karambaHZP |
» 2016-11-17 09:34:08 |
|
mateczek |
» 2016-11-17 09:46:27 chcesz bindowanie jak niżej ?? #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; } |
|
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ć... int pon( int a ) { cout << "poniedzialek"; } |
Na std::bind oraz std::function przyjdzie czas ;) |
|
« 1 » 2 |