Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct drawable {};
- struct texture {};
- template<typename...>
- struct void_ { using type = void; };
- template<typename T, typename = void>
- struct has_callback : std::false_type {};
- template<typename T>
- struct has_callback<T, typename void_<decltype(std::declval<T>().callback())>::type> : std::true_type {};
- struct test {
- template<typename Drawable, typename std::enable_if<has_callback<Drawable>::value, int>::type = 0>
- void do_register(const Drawable& t) {
- // register stuff's texture
- // ...
- // after registering, do a callback since it exists
- t.callback();
- }
- template<typename Drawable, typename std::enable_if<!has_callback<Drawable>::value, int>::type = 0>
- void do_register(const Drawable& t) {
- // register the stuff's texture
- // ...
- // after registering, the callback doesn't
- // exist so don't use it
- }
- void do_register(const texture& t) {
- // register texture
- // no callback
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement