Connecting Tech Pros Worldwide Forums | Help | Site Map

typecasting function pointer to void*

WittyGuy
Guest
 
Posts: n/a
#1: Jul 27 '06
How to typecast a "function pointer" to "const void*" type in C++ way?

int MyFunction (double money); // Function prototype

const void* arg = (const void*)MyFunction; // type casting function
pointer to const void* in C-style

void(*pFunc)() = (void(*)())(arg); // type casting const void* to function
pointer in C-style
(*pFunc)(); // Calling the function after type casting is done

Is typecasting like above is safe anyway?

regards,
Sukumar



Florian Stinglmayr
Guest
 
Posts: n/a
#2: Jul 27 '06

re: typecasting function pointer to void*



WittyGuy schrieb:
Quote:
How to typecast a "function pointer" to "const void*" type in C++ way?
>
int MyFunction (double money); // Function prototype
I suggest you to create a typedef for the function pointer:
typedef int (*TMyFunction) ( double );

And then use it!
void * ptr = static_cast<void*>(&some_func);
....
(static_cast<TMyFunction>(ptr))(23.42):

Kai-Uwe Bux
Guest
 
Posts: n/a
#3: Jul 27 '06

re: typecasting function pointer to void*


WittyGuy wrote:
Quote:
How to typecast a "function pointer" to "const void*" type in C++ way?
There is no "how".
Quote:
int MyFunction (double money); // Function prototype
>
const void* arg = (const void*)MyFunction; // type casting function
pointer to const void* in C-style
>
void(*pFunc)() = (void(*)())(arg); // type casting const void* to function
pointer in C-style
(*pFunc)(); // Calling the function after type casting is done
You are casting back to a different signature. Even if there was a roundtrip
guarantee through void* (which there is not), this conversion would be
unspecified.
Quote:
Is typecasting like above is safe anyway?
No: In C++ there is no round-trip guarantee for pointer-to-function or
pointer-to-member-function to void* and back. Just don't do it.

Function pointers are convertible to a different signature, however, the
result of such conversion cannot be used: it can only be converted back.
However, this does allow you to use void(*)(void) as a universal function
pointer to and from which you can cast (reinterpret_cast is the one you
might want to use) [5.2.10/6].


Best

Kai-Uwe Bux
Rolf Magnus
Guest
 
Posts: n/a
#4: Jul 27 '06

re: typecasting function pointer to void*


WittyGuy wrote:
Quote:
How to typecast a "function pointer" to "const void*" type in C++ way?
Not possible in standard C++. You can only cast object pointers to void*,
not function pointers.
Quote:
int MyFunction (double money); // Function prototype
>
const void* arg = (const void*)MyFunction; // type casting function
pointer to const void* in C-style
>
void(*pFunc)() = (void(*)())(arg); // type casting const void* to function
pointer in C-style
(*pFunc)(); // Calling the function after type casting is done
>
Is typecasting like above is safe anyway?
It is not safe at all. Assuming that your compiler supports the conversion
function pointer -void pointer as an extension (which is not too
uncommon), it would still be very dangerous, because you're calling a
function that takes one argument through a pointer to function that takes
no arguments.

msosno01@gmail.com
Guest
 
Posts: n/a
#5: Jul 27 '06

re: typecasting function pointer to void*


I think you can use reinterpret cast.
Rolf Magnus wrote:
Quote:
WittyGuy wrote:
>
Quote:
How to typecast a "function pointer" to "const void*" type in C++ way?
>
Not possible in standard C++. You can only cast object pointers to void*,
not function pointers.
>
Quote:
int MyFunction (double money); // Function prototype

const void* arg = (const void*)MyFunction; // type casting function
pointer to const void* in C-style

void(*pFunc)() = (void(*)())(arg); // type casting const void* to function
pointer in C-style
(*pFunc)(); // Calling the function after type casting is done

Is typecasting like above is safe anyway?
>
It is not safe at all. Assuming that your compiler supports the conversion
function pointer -void pointer as an extension (which is not too
uncommon), it would still be very dangerous, because you're calling a
function that takes one argument through a pointer to function that takes
no arguments.
Default User
Guest
 
Posts: n/a
#6: Jul 27 '06

re: typecasting function pointer to void*


msosno01@gmail.com wrote:
Quote:
I think you can use reinterpret cast.
Don't top-post.


You can get the compiler to shut up about the illegal conversion, but
that doesn't mean it will work.




Brian
Closed Thread