The name of a function is a pointer to the function...
But in case of function overloading the names of two functions are the same...
So which function does the name point to?
-
2you may want to look at a similar question: stackoverflow.com/questions/2942426/…davka– davka2011-05-31 04:13:02 +00:00Commented May 31, 2011 at 4:13
Add a comment
|
1 Answer
It depends on the context; otherwise it's ambiguous. See this example (modified except below):
void foo(int a) { }
void foo(int a, char b) { }
int main()
{
void (*functionPointer1)(int);
void (*functionPointer2)(int, char);
functionPointer1 = foo; // gets address of foo(int)
functionPointer2 = foo; // gets address of foo(int, char)
}
You can do this in many ways, but the #1 rule?
Avoid casts!
Otherwise you'll break type safety and probably shoot yourself in the foot either then or later.
(Issues can come up with calling conventions, random changes you don't notice, etc.)
4 Comments
Sarfaraz Nawaz
+1. @Mehrdad and @Ben: Point Noted which you two said in my post. Thanks :-)
user541686
@Nawaz: Come to think of it, maybe I should mention that in my post too. I'll add it. :)
Sarfaraz Nawaz
Yeah. That would be better, more complete. :-)
IronMensan
Sometimes casts are necessary. I have run into this when trying use boost::bind with overloaded member functions. Whenever possible, it is best to rename the functions to avoid the cast.