470,571 Members | 2,360 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 470,571 developers. It's quick & easy.

typecasting function pointer to void*

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
Jul 27 '06 #1
5 10910

WittyGuy schrieb:
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):

Jul 27 '06 #2
WittyGuy wrote:
How to typecast a "function pointer" to "const void*" type in C++ way?
There is no "how".
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.
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
Jul 27 '06 #3
WittyGuy wrote:
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.
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.

Jul 27 '06 #4
I think you can use reinterpret cast.
Rolf Magnus wrote:
WittyGuy wrote:
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.
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.
Jul 27 '06 #5
ms******@gmail.com wrote:
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
Jul 27 '06 #6

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

3 posts views Thread by Kapil Khosla | last post: by
3 posts views Thread by Robert Street | last post: by
11 posts views Thread by Vinod Patel | last post: by
3 posts views Thread by bnoordhuis | last post: by
12 posts views Thread by srinivas.satish | last post: by
12 posts views Thread by bwaichu | last post: by
1 post views Thread by livre | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.