И снова указатель на функцию-член...
От: anvaka Украина Yasiv
Дата: 28.07.05 21:02
Оценка:
Привет!
Я что-то не могу понять...

class A
{
public:
    typedef int (A::*AFUNC)(int);
    int foo(int j)
    {
        return j;
    }
    int runIt(AFUNC pfnA, int i)
    {
        return pfnA(i);// [1]
    }
};

int main(int argc, char* argv[])
{

    A a;
    a.runIt(a.foo,1);
    return 0;
}


Где же ошибка? Почему у меня msvc выдает ошибку в [1], мол term does not evaluate to a function?
Re: И снова указатель на функцию-член...
От: korzhik Россия  
Дата: 28.07.05 21:10
Оценка: 2 (1)
Здравствуйте, anvaka, Вы писали:

A>Привет!

A>Я что-то не могу понять...

[]

A>Где же ошибка? Почему у меня msvc выдает ошибку в [1], мол term does not evaluate to a function?


class A
{
public:
    typedef int (A::*AFUNC)(int);
    int foo(int j)
    {
        return j;
    }
    int runIt(AFUNC pfnA, int i)
    {
        return (this->*pfnA)(i);// [1]
    }
};

int main(int argc, char* argv[])
{

    A a;
    a.runIt(&A::foo,1);
    return 0;
}
Re: И снова указатель на функцию-член...
От: Freezy Россия  
Дата: 28.07.05 21:18
Оценка: 2 (1)
Здравствуйте, anvaka, Вы писали:

A>Привет!

A>Я что-то не могу понять...
A>Где же ошибка? Почему у меня msvc выдает ошибку в [1], мол term does not evaluate to a function?

Привет!
Может ты тебе надо так:
class A
{
public:
    typedef int (A::*AFUNC)(int);
    int foo(int j)
    {
        std::cout<<j<<std::endl;
        return j;
    }
    int runIt(A* a, AFUNC pfnA, int i)
    {
        return (a->*pfnA)(i); // Вместо a можно this написать, тогда в параметрах не надо писать A* a
    }
};

int main(int argc, char* argv[])
{

    A a;
    A::AFUNC foofuck = &A::foo;
    a.runIt(&a,foofuck,1);
    return 0;
}


Но чесно говоря не знаю, для чего тебе это надо Если я что-то и понял, то то, что тебе в таких случаях доктор паттерн Command прописал (о том ли я думаю?)
Re[2]: И снова указатель на функцию-член...
От: anvaka Украина Yasiv
Дата: 28.07.05 22:00
Оценка:
Спасибо!
Re[2]: И снова указатель на функцию-член...
От: anvaka Украина Yasiv
Дата: 28.07.05 22:16
Оценка:
Здравствуйте, Freezy, Вы писали:

F>Но чесно говоря не знаю, для чего тебе это надо Если я что-то и понял, то то, что тебе в таких случаях доктор паттерн Command прописал (о том ли я думаю?)


Почти . Идея такова: у меня этот клас (назовем его A) будет наделен n однотипными функциями, выполняющими различную работу. Каждая функция должна иметь доступ к конфигурационным данным, которые хранит в себе A. Сам A будет вызывать функции просто по индексу (в нем будет содержаться масив указателей на его же методы). Конечно, все это можно было сделать через условный оператор, но, имхо, это не так быстро и не так красиво.
И, конечно, можно было бы сделать это через, собственно, классы. (это, если я не ошибаюсь, и будет коммандом?, мои познания в паттернах проектирования весьма скудны), но меня не радует идея создания пары десятков друзей + конструирование этих товарищей...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.