Commit 90b5b05d by Szeberényi Imre

CB+Boost

parent 80e44aab
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
#define CALLBACK_H #define CALLBACK_H
/// Callback objektum. /// Callback objektum.
/// Nem ismeri modellt se, és a felhasználói felületet se. /// Nem ismeri modellt és a felhasználói felületet se.
class GombCallback { // callback funkcióhoz class GombCallback { // callback funkcióhoz
public: public:
virtual void callBack() = 0;// virtuális cb. függvény virtual void callBack() = 0;// virtuális cb. függvény
......
...@@ -10,10 +10,11 @@ ...@@ -10,10 +10,11 @@
#include "callback.h" #include "callback.h"
/// Gomb. /// Gomb.
/// A gomb "megnyomására" meghívódik a nnyom() tagfüggvény /// A gomb "megnyomására" meghívódik a nyom() tagfüggvény
class Gomb { class Gomb {
GombCallback &cb; // callback objektum referencia GombCallback &cb; /// callback objektum referencia
public: public:
/// konstruktor egy GombcallBack típusú objektumot kap, amiben a meghívandó cb. függvény van.
Gomb (GombCallback &t) :cb(t) {}// referencia inic. Gomb (GombCallback &t) :cb(t) {}// referencia inic.
/// A felhasználó felületen megnyomták a gombot /// A felhasználó felületen megnyomták a gombot
......
...@@ -13,7 +13,7 @@ using std::cin; ...@@ -13,7 +13,7 @@ using std::cin;
int main() { int main() {
Kapcsolo k1; Kapcsolo k1;
Gomb g1(k1); // itt kötjük össze a felhasználói felületet és a modellt. Gomb g1(k1); /// itt kötjük össze a felhasználói felületet és a modellt.
cout << "Megyomjuk a gombot: " << endl; cout << "Megyomjuk a gombot: " << endl;
cin.ignore(100, '\n'); cin.ignore(100, '\n');
......
...@@ -11,18 +11,19 @@ ...@@ -11,18 +11,19 @@
#include <boost/signals2.hpp> #include <boost/signals2.hpp>
/// Gomb. /// Gomb.
/// A gomb "megnyomására" meghívódik a nnyom() tagfüggvény /// A gomb "megnyomására" meghívódik a nyom() tagfüggvény
class Gomb { class Gomb {
boost::signals2::signal<void ()> sig; boost::signals2::signal<void ()> sig;
public: public:
/// A konstruktor egy funtort kap, ez lesz a slot.
template <typename F> template <typename F>
Gomb(F f) { Gomb(F f) {
sig.connect(f); sig.connect(f); /// itt kötjük össze
} }
/// A felhasználó felületen megnyomták a gombot /// A felhasználó felületen megnyomták a gombot
void nyom() { // megnyomták void nyom() { /// megnyomták
sig(); sig(); /// küldjük a signált
} }
}; };
#endif // FELULET_H #endif // FELULET_H
/** /**
* Felhasználói felület és a modell kapcsolata * Felhasználói felület és a modell kapcsolata
* Callback fv. demó * Boost lib demo
*
* CodeBloks-ban arra a könytárra kell állítani a boost globális változót,
* ahova a boost (boost/include és boost/lib) telepítve van.
* (Settings->Global variables...)
* *
*/ */
#include <iostream> #include <iostream>
#include "modell.h" #include "modell.h"
#include "felhfelulet.h" #include "felhfelulet.h"
#include <boost/signals2.hpp> #include <boost/signals2.hpp>
#include <boost/bind.hpp> #include <boost/bind/bind.hpp>
#include <boost/optional/optional_io.hpp>
using std::cout; using std::cout;
using std::endl; using std::endl;
using std::cin; using std::cin;
/// Játék függvény a paramétarátaás bemutatásához
int osszead(int a, int b) { return a + b; }
int main() { int main() {
Kapcsolo k1("k1"); Kapcsolo k1("k1");
Gomb g1(boost::bind(&Kapcsolo::callBack, &k1)); // itt kötjük össze a felhasználói felületet és a modellt. Gomb g1(boost::bind(&Kapcsolo::callBack, &k1)); /// Itt kötjük össze a felhasználói felületet és a modellt.
/// A bind készít funktort a tagfüggvényből és az objektum címéből.
cout << "Megyomjuk a gombot: " << endl; cout << "Megyomjuk a gombot: " << endl;
cin.ignore(100, '\n'); cin.ignore(100, '\n');
...@@ -31,8 +40,8 @@ int main() { ...@@ -31,8 +40,8 @@ int main() {
g1.nyom(); // újra g1.nyom(); // újra
/// Eddig nem sokban különbözött, csupán nem kellett e callback osztály. /// Eddig nem sokban különbözött a töbszörös örökléses megoldástól, csupán nem kellett e callback osztály.
/// De sokkal rugalmasabb. Csupán egy példa: /// A signal-slot azonban sokkal rugalmasabb. Itt csupán egy példa:
std::cout << "\nMindent elpszor be-, majd kikapcsol.\n"; std::cout << "\nMindent elpszor be-, majd kikapcsol.\n";
Kapcsolo k2("k2"); Kapcsolo k2("k2");
...@@ -43,5 +52,13 @@ int main() { ...@@ -43,5 +52,13 @@ int main() {
beki.connect(0, boost::bind(&Kapcsolo::be, &k2)); beki.connect(0, boost::bind(&Kapcsolo::be, &k2));
beki(); beki();
/// Máik példa, ami azt mutatja, hogy könnyú paramétert is átadni:
std::cout << "\nHogy megy a parameteratadas?\n";
boost::signals2::signal<int (int, int)> ad;
ad.connect(osszead);
std::cout << "1+2=" << ad(1,2) << std::endl;
std::cout << "10+100=" << ad(10,100) << std::endl;
return 0; return 0;
} }
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="nyomogomb" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Debug">
<Option output="bin/Debug/nyomogomb" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Debug/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-g" />
</Compiler>
</Target>
<Target title="Release">
<Option output="bin/Release/nyomogomb" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Release/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
</Compiler>
<Linker>
<Add option="-s" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-pedantic" />
<Add option="-Wfatal-errors" />
<Add option="-Wall" />
<Add option="-std=c++14" />
<Add directory="$(#boost.include)" />
</Compiler>
<Linker>
<Add directory="$(#boost.lib)" />
</Linker>
<Unit filename="felhfelulet.h" />
<Unit filename="gomb_demo.cpp" />
<Unit filename="modell.cpp" />
<Unit filename="modell.h" />
<Extensions />
</Project>
</CodeBlocks_project_file>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment