function object wrapper problem
I have a class that has a constructor that takes a Boost function object wrapper;
class some_class
{
public:
some_class(const boost::function1
Okko Willeboordse wrote:
So I do
class some_class { public: template <class T> some_class(const boost::function1
& get_member)
Why not just template<class F> some_class( F f ); ? boost::function<> is useful when you have to capture an arbitrary function object in a fixed type. Since your boost::function<> above is templated on T, it has a variable type, so you can just use the function object argument as-is.
Thanks, Then I end up with a constructor that takes any type of data which can not be distinguished from my other constructors. Peter Dimov wrote:
Okko Willeboordse wrote:
So I do
class some_class { public: template <class T> some_class(const boost::function1
& get_member) Why not just
template<class F> some_class( F f );
?
boost::function<> is useful when you have to capture an arbitrary function object in a fixed type. Since your boost::function<> above is templated on T, it has a variable type, so you can just use the function object argument as-is.
On Aug 29, 2005, at 4:44 PM, Okko Willeboordse wrote:
Peter Dimov wrote:
Okko Willeboordse wrote:
So I do
class some_class { public: template <class T> some_class(const boost::function1
& get_member) Why not just
template<class F> some_class( F f );
?
boost::function<> is useful when you have to capture an arbitrary function object in a fixed type. Since your boost::function<> above is templated on T, it has a variable type, so you can just use the function object argument as-is.
Thanks,
Then I end up with a constructor that takes any type of data which can not be distinguished from my other constructors.
I'm not sure what your other constructors look like, but perhaps you could constrain F such that there is no question that the templated constructor will accidently bind to the wrong call. For example: class some_class { public: some_class(int i); template <class T> template<class F> some_class( F f, typename enable_if::value>::type* = 0); }; -Howard
Thanks,
But also without any other constructor (for both some_class and
some_other_class) I get the compiler error.
I did another test.
I created a function with exactly the same signature as the some_class constructor;
template <class T>
some_func(const boost::function1
participants (3)
-
Howard Hinnant
-
Okko Willeboordse
-
Peter Dimov