| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- // Callback_24.cpp : Diese Datei enthält die Funktion "main". Hier beginnt und endet die Ausführung des Programms.
- //
- // https://github.com/wisoltech/cpp11-callbacks/blob/master/callback4.cc
- // https://www.wisol.ch/w/articles/2015-03-08-callbacks-in-cpp11/
- //
- //
- #include <iostream>
- #include <vector>
- #include <functional>
- #include <map>
- #include "cCallbackHdl.h"
- #include "cDataStruct.h"
- #include "cClassA.h"
- typedef std::pair<myData*, myOtherData*> pair;
- /***********************************************************************************************************************
- * Callback on a c function
- */
- extern "C"
- {
- static uint8_t c_client_callback(myData& v)
- {
- printf("C function callback: %d\n", v.myAge);
- printf("%s\n", v.pchar);
- return 2;
- }
- }
- /******************************************************************************************************
- * I need the flexibility to use other classes, e.g. myOtherData
- */
- extern "C"
- {
- static uint8_t c_client2_callback(myOtherData& v)
- {
- printf("C function callback: %d\n", v.myAge);
- printf("%s\n", v.pchar);
- return 4;
- }
- }
- extern "C"
- {
- static uint8_t c_client3_callback(myOtherData& v, myData& x)
- {
- printf("C function callback: %d\n", v.myAge);
- printf("%s\n", v.pchar);
- return 5;
- }
- }
- class Button;
- /***********************************************************************************************************************
- * Dummy Client #1
- * Uses a static method for a callback.
- */
- struct Client1
- {
- static uint8_t func0(myData v)
- {
- printf("static Client0::func0 %d\n", v.myAge);
- return 3;
- }
- static uint8_t func1(myData& v, myData& w)
- {
- printf("static Client1::func1 %d\n", v.myAge);
- printf("static Client1::func1 %d\n", w.myAge);
- return 3;
- }
- static uint8_t func2(void* v, void* w) {
- myData* x = (myData*) v;
- Button* y = (Button*) w;
- printf("static Client1::func2 %d\n", x->myAge);
- printf("static Client1::func2 %d\n", x->myAge);
- return 4;
- };
- };
- auto lambda = [&](myData v) {
- std::cout << "Lambda: " << v.myAge * 2 << std::endl;
- return 0;
- };
- auto lambda2 = [&](void* v, void* w) {
- std::cout << "Lambda: " << std::endl;
- return 0;
- };
- class Button {
- public:
- cCallbackHdl cbHdl;
- myData mydata{ 24, "myData struct", myData::FEMALE };
- myOtherData myOtherdata { 34, "myOtherdata struct", myOtherData::FEMALE };
- /*************************************************************************************
- *
- */
- void init() {
- /**************************************************************************************
- * https://en.cppreference.com/w/cpp/language/lambda
- * https://stackoverflow.com/questions/6458612/c0x-proper-way-to-receive-a-lambda-as-parameter-by-reference
- */
- // int x = (lambda)(mydata);
- /*
- *
- */
- auto resmap = cbHdl.CallBack_register(CALLBACK_TYPE::A, [](myData mydata) {
- printf("lambda callback: %d\n", mydata.myAge);
- return 2;
- });
- resmap = cbHdl.CallBack_register(CALLBACK_TYPE::B, &c_client_callback);
- resmap = cbHdl.CallBack_register(CALLBACK_TYPE::C, &Client1::func0);
- resmap = cbHdl.CallBack_register(CALLBACK_TYPE::D, lambda);
- resmap = cbHdl.CallBack_V_register(CALLBACK_TYPE::D, lambda2);
- resmap = cbHdl.CallBack_V_call(CALLBACK_TYPE::D, (void*)&myOtherdata, (void*) nullptr);
- resmap = cbHdl.CallBack_V_register(CALLBACK_TYPE::D, &Client1::func2);
- resmap = cbHdl.CallBack_V_call(CALLBACK_TYPE::D, (void*) &myOtherdata, (void*) this);
- }
- /**********************************************************************************************/
- void run() {
- std::cout << " run ..." << std::endl;
- uint8_t x = cbHdl.CallBack_call(CALLBACK_TYPE::A, mydata);
- x = cbHdl.CallBack_call(CALLBACK_TYPE::B, mydata);
- x = cbHdl.CallBack_call(CALLBACK_TYPE::C, mydata);
- x = cbHdl.CallBack_call(CALLBACK_TYPE::D, mydata);
- }
- };
- /***********************************************************************************************************************
- * Callback on a c function
- */
- int main()
- {
- std::cout << "Hello World!\n";
- Button button;
- A classA;
- /*
- * https://www.wisol.ch/w/articles/2015-03-08-callbacks-in-cpp11/
- */
- myData mostData; // = { 127, "test Lampda", myData::FEMALE };
- // mostData.myAge = 25;
- // mostData.pchar = "mostData";
- // mostData.sex = mostData.DIVERS;
- button.init();
- button.run();
- classA.init();
- classA.run();
- return 1;
- }
|