Таблица указателей на функции в классе C ++ - PullRequest
8 голосов
/ 06 мая 2011

Я пытаюсь составить таблицу указателей на функции внутри класса. Я не смог найти никаких примеров этого в Интернете, большинство из них включают использование указателей на функции-члены вне своего класса.

например:

class Test
{
    typedef void (Test::*FunctionType)();
    FunctionType table[0x100];

    void TestFunc()
    {
    }

    void FillTable()
    {
        for(int i = 0; i < 0x100; i++)
            table[i] = &Test::TestFunc;
    }   

    void Execute(int which)
    {
        table[which]();
    }
}test;

Дает мне ошибку "термин не оценивает функцию, принимающую 0 аргументов".

Ответы [ 3 ]

18 голосов
/ 06 мая 2011

В этой строке в функции Execute:

table[which]();

Вы не можете так его называть, потому что это не нормальная функция. Вы должны предоставить ему объект для работы, поскольку это указатель на функцию-член , а не указатель на функцию (есть разница):

(this->*table[which])();

Это сделает вызывающий объект таким, на который указывает указатель this (тот, который выполняет Execute).

Кроме того, при публикации ошибок обязательно указывайте строку, в которой происходит ошибка.

2 голосов
/ 06 мая 2011

Сет имеет правильный ответ. В следующий раз посмотрите номер ошибки компилятора в MSDN, и вы увидите то же самое: Ошибка компилятора C2064 .

1 голос
/ 06 мая 2011

Вам нужен контекст для вызова вашей функции.В вашем случае контекст this:

void Execute(int which)
{
    (this->*table[which])();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...