Use a function to bind instead of a class with a single defined method
Move internal implementation details to a separate namespace
Add specializations for unique_ptr