Jelajahi Sumber

used void* as parameter as this could be converted to any datatype

sfxsfl 3 tahun lalu
induk
melakukan
d992f98bdd

TEMPAT SAMPAH
Callback_27/.vs/Callback_27/v17/.suo


TEMPAT SAMPAH
Callback_27/.vs/Callback_27/v17/Browse.VC.db


TEMPAT SAMPAH
Callback_27/.vs/Callback_27/v17/ipch/AutoPCH/8c6870e20d909d19/CALLBACK_27.ipch


+ 14 - 7
Callback_27/Callback_27/Callback_27.cpp

@@ -73,19 +73,19 @@ struct Client1
 		printf("static Client1::func1 %d\n", w.myAge);
 		return 3;
 	}
-	static uint8_t func2(pair *p) {
-		myData* v = p->first; 
-		myOtherData* w = p->second; 
+	static uint8_t func2(void* v, void* w) {
+		myData* x = (myData*) v;
+		Button* y = (Button*) w;
 
-		printf("static Client1::func2 %d\n", v->myAge);
-		printf("static Client1::func2 %d\n", w->myAge);
+		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 {
 
@@ -106,7 +106,7 @@ public:
 		 *  https://stackoverflow.com/questions/6458612/c0x-proper-way-to-receive-a-lambda-as-parameter-by-reference
 		 */
 
-		int x = (lambda)(mydata);
+		// int x = (lambda)(mydata);
 
 		/*
 		 *
@@ -120,6 +120,13 @@ public:
 		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);
+
 	}
 
 	/**********************************************************************************************/

+ 27 - 2
Callback_27/Callback_27/cCallbackHdl.h

@@ -43,6 +43,30 @@ public:
 		// return 0; 
 	}
 
+	template <class T>
+	uint8_t CallBack_V_register(const CALLBACK_TYPE type, const T& cb)
+	{
+		// add callback to end of callback list
+		m_call_map.insert(std::make_pair(type, std::move(cb)));
+		return 0;
+	}
+
+	/// Call all the registered callbacks.
+	// template <class T>
+	uint8_t CallBack_V_call(const CALLBACK_TYPE type, void* val, void* xal) const
+	{
+		if (m_call_map.find(type) == m_call_map.end()) {
+			// std::cout << "Index not found: " << index << std::endl;
+			return 1;
+		}
+
+		const auto& cb = m_call_map.find(type)->second;
+		return (cb)(val,xal);
+		// return 0; 
+	}
+
+
+#if 0
 	template <class T>
 	uint8_t register_call_2map(const CALLBACK_TYPE type, const T& cb)
 	{
@@ -64,11 +88,12 @@ public:
 		return (cb)(val,xal);
 		// return 0;
 	}
+#endif
 
-private:
+// private:
 
 	// The map that stores the callbacks.
 	std::map<CALLBACK_TYPE, std::function<uint8_t(myData&)>> callmap;
 	std::map<CALLBACK_TYPE, std::function<uint8_t(myData&, myData&)>> call_map;
-
+	std::map<CALLBACK_TYPE, std::function<uint8_t(void*, void*)>> m_call_map;
 };

TEMPAT SAMPAH
Callback_27/Callback_27/x64/Debug/Callback_27.ilk


+ 1 - 1
Callback_27/Callback_27/x64/Debug/Callback_27.log

@@ -1,3 +1,3 @@
   Callback_27.cpp
-C:\Users\wruser\source\repos\Callback_27\Callback_27\Callback_27.cpp(151,9): warning C4101: "mostData": Unreferenzierte lokale Variable
+C:\Users\wruser\source\repos\Callback_27\Callback_27\Callback_27.cpp(158,9): warning C4101: "mostData": Unreferenzierte lokale Variable
   Callback_27.vcxproj -> C:\Users\wruser\source\repos\Callback_27\x64\Debug\Callback_27.exe

TEMPAT SAMPAH
Callback_27/Callback_27/x64/Debug/Callback_27.obj


TEMPAT SAMPAH
Callback_27/Callback_27/x64/Debug/cClassA.obj


TEMPAT SAMPAH
Callback_27/Callback_27/x64/Debug/vc143.idb


TEMPAT SAMPAH
Callback_27/Callback_27/x64/Debug/vc143.pdb


TEMPAT SAMPAH
Callback_27/x64/Debug/Callback_27.exe


TEMPAT SAMPAH
Callback_27/x64/Debug/Callback_27.pdb