Re: [boost] [Smart Ptr][Bind] Implementaion of Weak Callback Function

weak_ptr< A > p;
bind(&A::foo, throw_if_invalid(p)); bind(&A::foo, ignore_if_invalid(p)); bind(&A::foo, call_if_invalid(p, bar)); // bar
I think this is little bit problematic, because proxy weak_ptr_caller should know the signature of A::foo to provide correct "R operator()(args...)" Maybe, additional policy for weak_fn would be better void A::foo(int); function<void(int)> bar; bind(weak_fn(&A::foo,p),_1); // default ignore bind(weak_fn(&A::foo,p,throw_on_invalid()),_1); bind(weak_fn(&A::foo,p,bar),_1); // call bar on invalid This would not require changes in bind and also weak_fn would be useful without bind as well. Like function<void(int)> foobar=weak_fn(&A::foo,p); It would be simple to update weak_fn to add policy Artyom

Artyom wrote:
weak_ptr< A > p;
bind(&A::foo, throw_if_invalid(p)); bind(&A::foo, ignore_if_invalid(p)); bind(&A::foo, call_if_invalid(p, bar)); // bar
I think this is little bit problematic, because proxy weak_ptr_caller should know the signature of A::foo to provide correct "R operator()(args...)"
It will know it since it's instantiated from weak_ptr_proxy::operator->*, which is called with the bound function pointer.
Maybe, additional policy for weak_fn would be better
void A::foo(int); function<void(int)> bar;
bind(weak_fn(&A::foo,p),_1); // default ignore bind(weak_fn(&A::foo,p,throw_on_invalid()),_1); bind(weak_fn(&A::foo,p,bar),_1); // call bar on invalid
This would not require changes in bind and also weak_fn would be useful without bind as well.
Like function<void(int)> foobar=weak_fn(&A::foo,p); It would be simple to update weak_fn to add policy
I find this interface inconsistent with mem_fn. If this approach is chosen, I'd vote to change the naming in order to reduce confusion.
participants (2)
-
Andrey Semashev
-
Artyom