Why is that templated instead of using std::function<void(u32)>?