Jump to content
  • Advertisement
Sign in to follow this  
dpadam450

c++ function pointers

This topic is 1412 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

8 Years never needed a function pointer and I can't find a good example.

#include <iostream>
using namespace std;

// Basic Function
int AddOne(int a)
{
    return a + 1;
}

// I want a function that returns a pointer to AddOne so I can call it

// This declaration does not work, what is the delcaration to return the function as a pointer.
int (*)(int) GiveMeFunctionPointer()
{
    return &AddOne;
}

void main()
{
    int (*foo)(int) = &AddOne; // Cool foo is a pointer to a function taking an int

    int (*foo2)(int) = GiveMeFunctionPointer(); // This is what I want to use...

    cout << foo(2);
    system("pause");
}

Edited by dpadam450

Share this post


Link to post
Share on other sites
Advertisement

Going to apply that to my actual code now..........does anyone know what that actually unrolls into? I don't mind typdef's for this case, I just hate typdef everything to a typdef item with a a typdef vector etc. I usually avoid them for readability.
 

// Obviously this doesnt work. Just curious what the signature without the typdef would be
int (*function_type)(int) GiveMeFunctionPointer()

{

}

 

Thanks.

Share this post


Link to post
Share on other sites

 

Function pointer types are weird. It sort of goes around the function declaration.

I did try something like that I guess I didnt have it correct. Either way typdef has worked in my engine. Sweet.

Share this post


Link to post
Share on other sites


8 Years never needed a function pointer and I can't find a good example.

 

Function pointers are kind of a weird tool in your toolbox. People are normally taught function pointers in an academic/abstract setting and then they are quickly forgotten because you can get by without them on a day to day basis. So here is a real world example.

 

I recently used function pointers (C# delegates) in a generic Credit Card Processing library that I wrote for my employer. It needed to work across all the C# projects who had different data-layers. I had a very specific series of events I wanted to happen when sending a credit card transaction as it was being used to make it bullet proof.

  1. Save the credit card transaction attempt BEFORE sending to the processor - Status: About to Send
  2. Send the transaction to the processor
  3. Save the result of the credit card transaction - Status: Approved/Denied

I could have solved this problem with documentation. Hey jerkies! Do it like I told you! But, if they didn't use it correctly, the burden of figuring out the problem was going to be on my shoulders anyway. So I'd rather be sure.

 

I could have solved the problem with direct saves through one of the data layers. But then I'd have to copy/paste the code in each project and rewrite the saves for each data layer. If there was a bug, I'd have to fix it in each copy of the code... Bleh.

 

So, I decided to use function pointers (C# delegates). The signature was:

bool PersistTransaction(CreditCardTransactionInfo)

I didn't care how they saved it, I just tell them the info they need to save. If there is a problem saving the data, they should return false to me so I don't try to go through with the transaction. This allowed them to use the data layer they felt like using. Heck, they could have even saved it to a file instead of into the database if they felt like it.The more junior programmers started murmuring amongst themselves and claimed I was a dark sorcerer...

 

In games, you might use function pointers to control simple AI movements for sidescrolling shooters. Basic enemies might just move straight, others might follow a sin curve, and others track the player like a heat seeking missile. You can solve this problem without function pointers, but it opens up some neat possibilities.

 

- Eck

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!