2013-04-15 2 views
1

VxWorks 응용 프로그램에 C++을 쓰고 있습니다. VxWorks는 C 기반이기 때문에 인수로 함수 포인터를 사용하는 함수는 C++의 멤버 함수 포인터와 호환되지 않습니다.구성원 함수 VxWorks의 포인터

저는 taskSpawn과 같은 함수에 전달할 수 있도록 30 개 이상의 멤버 함수로 여러 번 인스턴스화 된 클래스 (SomeClass)가 있습니다. 나는 수행 할 수있는이 두 가지 방법을 알고,하지만 기존의 솔루션 중 하나를 특히 좋아 아니에요 :

static void CallFunction1(SomeClass *objectToCallFunction1On); 
static void CallFunction2(SomeClass *objectToCallFunction2On); 
... 
static void CallFunction30(SomeClass *objectToCallFunction30On); 


void Function1(); 
void Function2(); 
... 
void Function30(); 
:

  1. 를 사용하여 정적 함수는 특정 개체에 C의 함수 포인터를 호출

    static void CallFunction(SomeClass *objectToCallFunctionOn, int functionToCall); 
    
    void Function1(); 
    void Function2(); 
    ... 
    void Function30(); 
    
:
  • 은 특정 객체에 호출하는 기능을 지정하는 정수 또는 열거 형을 사용

    정말, 정말로이 두 가지 솔루션을 싫어합니다. 이 문제에 대해 깨끗하고 간단한 해결책이 있습니까?

  • 답변

    1

    첫 번째 옵션은 함수 포인터의 배열을 사용하는 것입니다.

    static void (*functionArray[30])(SomeClass *) = { 
        Function1, 
        Function2, 
        Function3, 
        Function4 
        // 
    }; 
    
    static void CallFunction(SomeClass *objectToCallFunctionOn, int functionToCall) { 
        functionArray[functionToCall](objectToCallFunctionOn); 
    } 
    

    또 다른 옵션은 비 형 템플릿 매개 변수와 같은 일을하는 것입니다. 하지만 첫 번째 옵션으로이 문제를 공정하게 해결할 수 있다고 생각합니다.