0
sanjaik's Avatar
Light Poster
Hi,
How r u ?
See this my code, here u need change calling based on swich case
to make an array that all. enjoy.
Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct strfunptr 
{
	float	a;
	float   b;
	float (*Func)(float,float);

}sfptr;

float Plus(float a, float b) 
{
	return a + b; 
}
float Minus(float a, float b) 
{
	return a - b; 
}
float Mult(float a, float b)
{
	return a * b; 
}

float Div(float a, float b) 
{
	return a / b; 
}

void Switch_With_Function_Pointer(struct strfunptr *);

int main()
{
	sfptr *ptr;

	ptr = (struct strfunptr*)malloc(sizeof(ptr));
	char ch;

	do
	{
		printf("1.Add \n");
		printf("2.Sub \n");
		printf("3.Mul \n");
		printf("4.Div \n");
	
		printf("Enter the operation Choice\n");
		scanf("%d",&ch);

		switch(ch)
		{
			case 1 : printf(" \n Enter the numbers :");
					 scanf("%f %f",&ptr->a,&ptr->b);
					 ptr->Func = Plus;
					 break;

			case 2 : printf(" \n Enter the numbers :");
					 scanf("%f %f",&ptr->a,&ptr->b);
			    	 ptr->Func = Minus;
					 break;

			case 3 : printf("\n Enter the numbers :");
					 scanf("%f %f",&ptr->a,&ptr->b);
					 ptr->Func = Mult;
					 break;
			case 4 : printf(" \n Enter the numbers :");
					 scanf("%f %f",&ptr->a,&ptr->b);
   					 ptr->Func = Div;
				     break;

			default :
				printf(" \n Invalid Choice :");
				exit(0);
		}
		Switch_With_Function_Pointer(ptr);

	}while(1);

	return 0;
}

void Switch_With_Function_Pointer(struct strfunptr *funptr )
{
	float result = funptr->Func(funptr->a,funptr->b);
	printf("Switch with function result is :%f\n",result);
}
Quote:
Originally Posted by sowmi
Hi All,

I am trying to implement the concept of function pointer in C++.
While compiling i got some errors which I couldnt figure out the reason .
So,Please let me know what changes should be done for resolving that error.

I am trying to execute one particular command function when the commandis pressed.Likewise, I have 100 commands and whenever the commands are pressed the corresponding function + arguements should be passed and the function pointer should execute the command.


Below are my code,

command.h
**********
Code:
#define FUNCPTR  void *
#define MAX_NUM_COMMANDS 3

typedef struct
{
   char command[LINELEN];                           /* name of the command */
   char parm1[LINELEN];                             /*parameter 1 */
   char parm2[LINELEN];                             /*parameter 2 */
                                      
} ExeCmd_s;
class FunctionEntry
{

public:
    char* commandString;
    FUNCPTR pFun;   
    int SearchCommand(char* command);
};
FunctionEntry funArr[MAX_NUM_COMMANDS]=
{
	    {"aaa",(FUNCPTR)aaa},
                   {"bbb", (FUNCPTR)bbb},
   	    {"ccc",(FUNCPTR)ccc}

};
enum commandName
{
	aaa = 0,
	bbb
};
command.c
**********
Code:
void void Execute ()
{
  .........
  .........
 Execmd execmd;
 FunctionEntry command;
 int rc;
 if(0 != SearchCommand(exeCmd.command))
 {
    command = FunctionEntry.SearchCommand(exeCmd.command);
    switch((int)command.numOfArguements)
    {
         case Zero :
           rc = ((command.pFun)();
           break;
	 case one:
	   rc = ((command.pFun),exeCmd.parm1);
	   break;
    }
 }
 else
 {
   printf("No match");
 }

}



//Function to search and returns the index of the command

int FunctionEntry :: SearchCommand(char* command)
{
     
     ExeCmd_s exeCmd;  //already had a Structure where I am extracting the commandname..
     int index = 0;     
     while(index < MAX_NUM_COMMANDS)
     {
	 if(strcmp(exeCmd.command,funArr[index]) == 0)
	 {
	    return &funArr[index];
	 }
         index++;	
    }
     return NULL;
}


Please let me know where i should change the code.
Expecting some solutions for this code ...

Thanks,
Sowmi

Last edited by shabbir; 14Aug2007 at 15:34.. Reason: Code block
0
priyapai's Avatar, Join Date: Mar 2006
Go4Expert Member
Hi sanjai,

Thats a vry good example cld u refer me some links to understand mor about callback functions... That wld b vry helpful..

Thanks in Advance.