$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Pedro Lamarão (pedro.lamarao_at_[hidden])
Date: 2007-01-15 09:20:54
Mark Ruzon escreveu:
> I have a function that performs the same task on several data types and 
> data combinations:
> 
> template <typename T>
> int f(const type1<T>& x);
> 
> template <typename T>
> int f(const type2<T>& x);
> 
> template <typename T>
> int f(const type2<T>& x, const type2<T>& y);
> 
> I want to create a function object out of the second function.  However, 
> bind(f, _1) is ambiguous.  Is there a way to disambiguate this using a 
> bind call, or do I have to create my own function object?
To take the address of an overloaded function you need to use 
static_cast to select the correct overload.
The following program will compile.
template <typename T> struct type1 { };
template <typename T> struct type2 { };
template <typename T>
int f(const type1<T>& x) { return 0; }
template <typename T>
int f(const type2<T>& x) { return 0; }
template <typename T>
int f(const type2<T>& x, const type2<T>& y) { return 0; }
int
main (int argc, char* argv[]) {
     int (*ptr)(const type1<int>&) =
         static_cast<int (*)(const type1<int>&)>(&f);
     return ptr(type1<int>());
}
-- Pedro Lamarão