수치실험 코드를 짜고 있는데, 

같은 실험을 몇백만번 돌려서 평균내고 그래프 그리고 그런걸 한단 말이야?

원래는 파이썬으로 대~충 짜서 적당히 돌렸는데,

이번에 하는건 그렇게 하니까 속도가 너무 안나와서 아예 c++ (STL쓰는 c언어....) 로 처음부터 다시 짜고있음


어떤 함수 func1() 을 백만번 돌리고,

그 안에 func2, func3, func4 ... 가 있는데,

이 func2 같은것들의 종류를 다르게 했을때 얻어지는 효과를 알고싶은거거든


예를들어서, func2가 문제의 초기값을 정해주는 함수고,

func2에 파라메터 "A"가 입력되면 방법 A가, "B"가 입력되면 방법 B가 실행되는 식으로 구현했음.


실제로는 


(적절한 반환 자료형) func2Router(string METHOD, 기타 파라메터) {

switch(METHOD){ // switch에 텍스트 쓰게하는건 해쉬함수로 적절히 구현

case METHOD == "A" :

return func2A(기타 파라메터);

break;

case METHON == "B" :

return func2B(기타 파라메터);

break;

이하생략

}


이런식으로 매번 main함수에서 func2가 실행되어야하는 자리에 

func2의 종류를 의미하는 스트링 METHOD를 입력받는 라우터함수를 한번 거쳐서 

실제로 내가 실행하고 싶은 진짜 func2가 실행되도록 했는데,

이게 관리도 힘들고 어짜피 메인함수에 해당하는 func1()에서는 모든 func2()가 같은 METHOD를 사용하거든


그니까 이 라우터함수는 func2를 사용할때마다 매번 호출될 필요가 없고,

가장 밖에 있는 main함수에서 한번만 func2를 설정해서 그 뒤로 그걸 사용하면 되는거잖아??


내가 아는 짧은 c 지식으로는 

이걸 가능하게 해주는 방법이 함수 포인터라고 알고 있음


즉, main함수에서 

void (*func2) (func2들이 받을법한 모든 파라메터들) 

이라고 선언하고,

위에 있는 func2Router를 매번 실행시키는 대신에


void func2Router (void (*f2p), string METHOD){

switch(METHOD){ // switch에 텍스트 쓰게하는건 해쉬함수로 적절히 구현

case METHOD == "A" :

f2p = func2A;

break;

case METHON == "B" :

f2p = func2B;

break;

이하생략

return 0;

}


void main(){

string METHOD = "A";

void (*func2) (파라매터 들);

func2Router(func2);


생략


return 0

}


이런식으로 해주면 앞으로 func2를 사용할때마다 func2A가 호출되는건가?


이런거 말고 virtual함수라는것도 있다고 들었는데

그냥 함수포인터 쓰면 똑같은거 할수 있는거임????


사실 맨위에 있는 스위치로 분기해주는것도 작동에는 문제가 없는데,

속도랑 관리면에서 영 좋은방법이 아닌것같아서;;