#include <iostream>
xtd::callback<int(int, int)> oAdd;
xtd::callback<int(int, int)> oSubtract;
xtd::callback<int(int, int)> oMultiply;
int Adder(int x, int y){ return x + y; }
struct Multiplier{
int Multiply(int x, int y){ return x*y; }
};
int main(){
oAdd += &Adder;
std::cout << "Calling Adder(5, 7) through oAdd callback returns : " << oAdd(5, 7) << std::endl;
oSubtract.connect([](int x, int y){ return x - y; });
std::cout << "Calling lambda(15, 4) through oSubtract callback returns : " << oSubtract(15, 4) << std::endl;
Multiplier oMultiplier;
oMultiply.connect<Multiplier, &Multiplier::Multiply>(&oMultiplier);
std::cout << "Calling oMultipler.Multiply(6,3) through oMultiply callback returns : " << oMultiply(6, 3) << std::endl;
return 0;
}