Re: Pointer to OVERLOADED member function?
On Feb 1, 8:47 am, "Somebody" <someb...@cox.net> wrote:
Given this class:
class A
{
public:
int Test()
{
return 0;
}
int Test(int a)
{
return 1;
}
};
how can I get the following code to work?
LPVOID lpv = (LPVOID&)A::Test;
What is LPVOID? It can't be void*, since you can't convert a
pointer to member function, or even a pointer to a non-member
function, to a void*. And I can't think of what else it could
be. (FWIW: some compilers, e.g. g++, seem to be a bit lax and
allow the conversion of a pointer to function to void*. But
I've never used a compiler where a pointer to a member function
would fit into a void*.)
If I comment out the 2nd overloaded Test(int) function, this
compiles just fine and does whats expected.
Which is?
If I leave Test(int) in the code, the compiler actually **
CRASHES ** with an internal compiler error (Visual Studio
2008).
Well, any time the compiler crashes, it is an error in the
compiler, so you know where to ask.
Obviously the issue here is how do I differentiate between the
two functions when I am trying to get the pointer to the
function?
Function overload resolution for taking the address of a pointer
can work in two ways:
-- if the address is immediately assigned to a variable, then
the type of the variable will be used for overload
resolution; otherwise,
-- you have to specify the type of the address explicitly,
using one of the cast notations, e.g.:
static_cast< int (A::*)( int ) >( &A::Test )
or
static_cast< int (A::*)() >( &A::Test )
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34