Last active
November 26, 2015 06:27
-
-
Save xaxxon/f7dda06e5dfc0393648c to your computer and use it in GitHub Desktop.
segfaults on line 10
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void subscribe(const std::string subject, std::function<void(Message *)> callback); | |
template<typename T> | |
void subscribe(std::function<void(T *)> callback) { | |
this->subscribe(T::subject, [&](Message * message){ | |
printf("In wrapping callback\n"); | |
T * specific_message = dynamic_cast<T *>(message); | |
if (specific_message != nullptr) { | |
printf("About to call actual callback from wrapper\n"); | |
callback(specific_message); | |
} else { | |
printf("Skipping calling actual callback from wrapper because message type mismatch\n"); | |
} | |
}); | |
} | |
// this is the caller: | |
this->subscribe<Message_FindObjectsAtPoint>([&](Message_FindObjectsAtPoint * message) { | |
... | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
(lldb) down
frame #0: 0x000000010005c046 game`std::__1::function<void (Message_FindObjectsAtPoint*)>::operator(this=0x00007fff5fbfe760, _arg=0x00007fff5fbff828)(Message_FindObjectsAtPoint) const + 134 at functional:1793
1790 if (_f == 0)
1791 throw bad_function_call();
1792 #endif // _LIBCPP_NO_EXCEPTIONS
-> 1793 return (__f)(_VSTD::forward<_ArgTypes>(__arg)...);
1794 }
1795
1796 #ifndef _LIBCPP_NO_RTTI
(lldb) bt
std::__1::function<void (Message_FindObjectsAtPoint*)>::operator(this=0x00007fff5fbfe760, __arg=0x00007fff5fbff828)(Message_FindObjectsAtPoint*) const + 134 at functional:1793 frame #1: 0x000000010005bf97 game
void Subscriber::subscribe<Message_FindObjectsAtPoint>(this=0x000000010045def8, message=0x00007fff5fbff828)>)::'lambda'(Message_)::operator()(Message_) const + 183 at messager.h:76frame #2: 0x000000010005bed0 game
void std::__1::__invoke_void_return_wrapper<void>::__call<void Subscriber::subscribe<Message_FindObjectsAtPoint>(std::__1::function<void (Message_FindObjectsAtPoint*)>)::'lambda'(Message*)&, Message*>(void Subscriber::subscribe<Message_FindObjectsAtPoint>(std::__1::function<void (Message_FindObjectsAtPoint*)>)::'lambda'(Message*)&&&, Message*&&) [inlined] decltype(__f=0x000000010045def8, __args=0x00007fff5fbff268)(std::__1::forward<Message*>(fp0))) std::__1::__invoke<void Subscriber::subscribe<Message_FindObjectsAtPoint>(std::__1::function<void (Message_FindObjectsAtPoint*)>)::'lambda'(Message*)&, Message*>(Message_FindObjectsAtPoint&&, Message*&&) + 80 at __functional_base:415 frame #3: 0x000000010005beb0 game
void std::__1::__invoke_void_return_wrapper::__call<void Subscriber::subscribe<Message_FindObjectsAtPoint>(__args=0x000000010045def8, args=0x00007fff5fbff268)>)::'lambda'(Message)&, Message>(void Subscriber::subscribe<Message_FindObjectsAtPoint>(std::1::function<void (Message_FindObjectsAtPoint*)>)::'lambda'(Message)&&&, Message&&) + 48 at __functional_base:440