Es ist nur eine Möglichkeit, Ihnen zu zeigen, dass eine einminütige Testversion Ihnen einen Einblick geben kann. Aber wie Kirill Daybov in einen seines Kommentar erwähnt würde ich Sie ermutigt, delegieren c to google ++, finden Sie Artikel mit vielen stärkeren technischen Hinweisen finden
#include <iostream>
#include <list>
#include <functional> //c++11
using namespace std;
//For exercice only, C++11 required
template<typename U> class naive_delegate
{
list<function<void(U)>>_list;
public:
naive_delegate<U> & operator+= (function<void(U)> && fref)
{ _list.push_back(fref); return *this;}
void operator()(U && input_param)
{
if (_list.empty())
cout << "Nothing to do for call of delegate with param " << input_param << endl;
else
for (const auto & elem : _list)
elem(input_param);
}
};
void anwser(int i) { cout << "The answer is " << i << endl; }
int main()
{
naive_delegate<int> ndel;
ndel(1);
ndel += [](int i) { cout << "What is the answer ? " << endl; };
ndel += anwser;
ndel(42);
return 0;
}
Die Ergebnisse sind
Nothing to do for call of delegate with param 1
What is the answer ?
The answer is 42
Beachten Sie, dass unter andere, ich bin nicht in der Lage, Entfernung zu behandeln (- =) ...
Sie können eine Liste von Funktionen haben und sie in Reihenfolge aufrufen und zu dieser Liste hinzufügen. Aber 'C++' ist eine kompilierte Sprache, Sie können die eigentlichen Funktionen zur Laufzeit nicht bearbeiten. – Galik
Ist C# nicht auch eine kompilierte Sprache? – V0ldek
Aber C# ist auch eine kompilierte Sprache @Galik –