#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"); make_continuable([=](Callback<>&& /*callback*/) { }); int i = 0; ++i; 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) { }); cba1.invalidate(); CastSpell(63362); std::vector myvec; typedef fu::requires_functional_constructible>::type test_assert1; // typedef fu::requires_functional_constructible>::type test_assert2; // auto cba2 = make_continuable(myvec); std::cout << "ok" << std::endl; return 0; }