I'm using Visual Studio 2015 and I would like to append Button::track_
function to the callbacks
vector so that all functions inside callbacks
will be called once the invoke_all
function in events class was called.
buttons.h
class Button:
public Texture
{
public:
void track();
}
buttons.cpp
void Button::track()
{
Events::add_handler(&Button::track_);
}
void Button::track_() { ... }
events.h
typedef std::function<void()> cb;
extern std::vector<cb> callbacks;
class Events
{
public:
static void add_handler(cb);
static void invoke_all();
};
events.cpp
std::vector<cb> callbacks;
void Events::add_handler(cb c)
{
callbacks.push_back(c);
}
void Events::invoke_all()
{
decltype(callbacks.size()) i = 0;
for (; i < callbacks.size(); i++)
callbacks[i]();
}
I always get this error message
Error C2893: Failed to specialize function template 'unknown-type std::invoke(_Callable &&,_Types &&...)' SDL d:\programs\microsoft visual studio 2015\vc\include\type_traits 1494