Указатели на функции-члены в VxWorks

Я пишу C ++ для приложения VxWorks. Поскольку VxWorks основан на C, функции, которые принимают указатели на функции в качестве аргументов, несовместимы с указателями на функции-члены C ++.

У меня есть класс (SomeClass), который создается несколько раз с более чем 30 функциями-членами, которые я хотел бы иметь возможность передавать в функции, такие как taskSpawn, Я знаю два пути этого Можно быть выполненным, но я не особенно люблю ни одно традиционное решение:

  1. Используйте статические функции для вызова указателя на функцию C для определенного объекта:

    static void CallFunction1(SomeClass *objectToCallFunction1On);
    static void CallFunction2(SomeClass *objectToCallFunction2On);
    ...
    static void CallFunction30(SomeClass *objectToCallFunction30On);void Function1();
    void Function2();
    ...
    void Function30();
    
  2. Используйте целочисленный или перечислимый тип, чтобы указать функцию для вызова определенного объекта:

    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);
}

Другим вариантом будет сделать то же самое с нетиповыми параметрами шаблона. Но я думаю, что первый вариант решает проблему справедливо.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]