Re: Функция член базового класса в кач-ве параметра. Ошибка
От: -MyXa- Россия  
Дата: 19.12.09 05:28
Оценка:
Здравствуйте, Аноним, Вы писали:

А мы так:
A::f<D, static_cast<void (D::*)(void)>(&D::f)>(&d);


Оказывается, выражение &D::f имеет тип void (B::*)(void), а компилятор по чём зря не будет кастить шаблонный параметр void (B::*)(void) в void (D::*)(void) (не шаблонные, конечно, кастятся).

По-этому так можно:

struct A {
    template< class T, class M>
    static void f( T* obj, M TMethod ){
        (obj->*TMethod)();
    }    
};

struct B {
    void f() {
        cout << "f()" << endl;
    }
};

struct D : B {
};

int main() {
    D d;
    A::f<D>(&d, &D::f);
    return 0;
}
Если не поможет, будем действовать током... 600 Вольт (C)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.