#include "Callback.h" #include "WeakCallbackContainer.h" #include "Continuable.h" #include #include #include #include #include enum SpellCastResult { SPELL_FAILED_SUCCESS = 0, SPELL_FAILED_AFFECTING_COMBAT = 1, SPELL_FAILED_ALREADY_AT_FULL_HEALTH = 2, SPELL_FAILED_ALREADY_AT_FULL_MANA = 3, SPELL_FAILED_ALREADY_AT_FULL_POWER = 4, SPELL_FAILED_ALREADY_BEING_TAMED = 5 }; Continuable CastSpell(int id) { return make_continuable([=](Callback&& callback) { std::cout << "Cast " << id << std::endl; // on success call the callback with SPELL_FAILED_SUCCESS callback(SPELL_FAILED_SUCCESS); }); } template void test_unwrap(std::string const& msg) { std::cout << msg << " is unwrappable: " << (fu::is_unwrappable::value ? "true" : "false") << std::endl; } int main(int /*argc*/, char** /*argv*/) { test_unwrap("void()"); test_unwrap>("std::function"); test_unwrap>("std::vector"); auto voidcontinue = make_continuable([=](Callback<>&& /*callback*/) { }); auto lam = [=](Callback&& /*callback*/) { // on success call the callback with SPELL_FAILED_SUCCESS // callback(SPELL_FAILED_SUCCESS); }; fu::function_type_of_t fun1; fun1 = lam; fun1(Callback()); fu::function_type_of_t> fun2; shared_callback_of_t> sc1; weak_callback_of_t> sc2; make_weak_wrapped_callback(sc1); make_weak_wrapped_callback(sc2); WeakCallbackContainer callback; auto weakCallback = callback([] { }); typedef Continuable cont123; typedef Continuable> myty1; typedef Continuable, float> myty2; // Continuable> spell CastSpell(63362) .then([](SpellCastResult result) { return CastSpell(63362); }) .then([](SpellCastResult result) { }); // Wraps a callback function into a continuable auto cba1 = make_continuable([=](Callback&& callback) { }); std::cout << "ok" << std::endl; return 0; }