함수포인터 질문입니다.
글쓴이: alwaysN00b / 작성시간: 토, 2005/08/13 - 2:02오전
struct 안에 함수포인터를 포함 시키는 방법은 없나요?
꼭 struct 을 사용하지 않고
함수 set(?) 을 넘겨줄수 있어도 좋습니다.
질문이 부족한것 같습니다만 코드좀 봐주시길 ^^
void bf(int);
void af(int);
typedef struct Renderor {
void (*fn_bf)();
void (*fn_af)();
fn_bf = bf;
fn_af = af;
} Renderor;
void makeupIndex();
void myrenderor(Renderor);
int main(){
makeupIndex();
}
void makeupIndex(){
//call function
myrenderor(renderor);
}
void myrenderor(Renderor p){
(*(p.fn_bf))(1);
(*(p.fn_af))(2);
}
void bf(int a){
printf("bf : %d \n",a);
}
void af(int a){
printf("af : %d \n",a);
}Forums:


fn_bf = bf;fn_af = af; 이 부분을 별도의 생
fn_bf = bf;
fn_af = af;
이 부분을 별도의 생성자 함수를 만들어서 처리하십시오.
C++이라면 생성자에 써주면 되고, C라면 createRenderor() 와 같은 함수를 만들어서 다음과 같이 처리하십시오.
Renderor *p = createRenderor();
윗 분이 잘 설명해 주셨네요.이를테면 이런식이겠죠...[cod
윗 분이 잘 설명해 주셨네요.
이를테면 이런식이겠죠...
#include <iostream> void bf(int); void af(int); struct Renderor { void (*fn_bf)(int); void (*fn_af)(int); Renderor() : fn_bf(bf), fn_af(af) {} } renderor; void makeupIndex(); void myrenderor(Renderor); int main(){ makeupIndex(); } void makeupIndex() { //call function myrenderor(renderor); } void myrenderor(Renderor p){ (*(p.fn_bf))(1); (*(p.fn_af))(2); } void bf(int a){ printf("bf : %d \n",a); } void af(int a) { printf("af : %d \n",a); }답변 감사드립니다.struct 안에서 저런 코드를 사용하고선
답변 감사드립니다.
struct 안에서 저런 코드를 사용하고선
에러나는 이유는 몰랐습니다.
언제나 시작
[code:1]typedef int (*Render_t)&
typedef int (*Render_t)(int x, int y, void *msg); typedef struct tagRender { int fd; Render_t print_it; }MyRender_t; ////// int print_horizontal( int x, int y, void *msg) { printf("x = %d, y = %d, msg=[%s]\n", x, y, (char *)msg); return 999; } int print_vertical( int x, int y, void *msg) { printf("x = %d\n", x); printf("y = %d\n", y); printf("msg[%s]\n", (char *)msg); return 2005; } int main() { MyRender_t mTest; printf("---- start 1----\n"); mTest.print_it = print_horizontal; mTest.print_it(1,2,"hello world"); printf("---- start 2 ----\n"); mTest.print_it = print_vertical; mTest.print_it(1,2,"hello world"); printf("---- e n d ----\n"); return 0; }[code:1]typedef int (*fn_Renderor
typedef int (*fn_Renderor)(Renderor *); typedef struct Renderor { int val1; int val2; fn_Renderor fn_bf; fn_Renderor fn_af; } Renderor; Renderor *createRenderor(int fooval1,int fooval2,void (*fn1)(),void (*fn2)()) { Renderor *rs; rs = (Renderor *)malloc(sizeof(Renderor)); rs->val1 = fooval1; rs->val2 = fooval2; rs->fn_bf = fn1; rs->fn_af = fn2; return rs; } void makeupIndex(Redneror *); int main(){ Renderor *myRenderor ; myRenderor = createRenderor(fooval1,fooval2,bf,af); makeupIndex(myRenderor); } void makeupIndex(Renderor *p){ (*(p->fn_bf))(p); (*(p->fn_af))(p); } void bf(Renderor *thiss){ printf("bf : %d \n",thiss->val1); } void af(Renderor *thiss){ printf("af : %d \n",thiss->val2); }답변 감사드립니다.
요고 비슷하게 만들려고 합니다. ^^
언제나 시작
댓글 달기