Указатель на поле как параметр шаблонной функции
От: Kingofastellarwar Украина  
Дата: 06.03.16 17:17
Оценка:
как исправить?

class Test;

template<class T> class Evt
{
    public:
        void operator()(T * t)
        {
        }
};

class Test
{
    public:
        Evt<Test *>    memberA;
        Evt<Test *>    memberB;
        Evt<Test *>    memberC;
};

template<typename M> void Propagate(Test * r, M m)
{
    r->*m(r); //term does not evaluate to a function taking 1 arguments

}

int main()
{
    Test t;
    Propagate(&t, &Test::memberA);
    Propagate(&t, &Test::memberB);
    Propagate(&t, &Test::memberC);
}
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re: Указатель на поле как параметр шаблонной функции
От: Evgeny.Panasyuk Россия  
Дата: 06.03.16 17:28
Оценка:
template<typename M>
void Propagate(Test *r, M Test::*m)
{
    (r->*m)(&r);
}


Но, заметь, у тебя параметр у operator() это Test**, то есть указатель на указатель, видимо это ошибка.
Re[2]: Указатель на поле как параметр шаблонной функции
От: Kingofastellarwar Украина  
Дата: 06.03.16 17:35
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Но, заметь, у тебя параметр у operator() это Test**, то есть указатель на указатель, видимо это ошибка.


да, есть опечатка мелкая, но всё равно не компилится ни так ни сяк
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[3]: Указатель на поле как параметр шаблонной функции
От: bnk СССР http://unmanagedvisio.com/
Дата: 06.03.16 17:50
Оценка: +1
Здравствуйте, Kingofastellarwar, Вы писали:

K>да, есть опечатка мелкая, но всё равно не компилится ни так ни сяк


Вроде все компилится? Все же подправь звездочки

template<class T> class Evt
{
public:
    void operator()(T * t)
    {
    }
};

class Test
{
public:
    Evt<Test>    memberA;
    Evt<Test>    memberB;
    Evt<Test>    memberC;
};

template<typename M> void Propagate(Test * r, M m)
{
    (r->*m)(r);
}

int main()
{
    Test t;
    Propagate(&t, &Test::memberA);
    Propagate(&t, &Test::memberB);
    Propagate(&t, &Test::memberC);
}
Re[4]: Указатель на поле как параметр шаблонной функции
От: Kingofastellarwar Украина  
Дата: 06.03.16 18:10
Оценка:
Здравствуйте, bnk, Вы писали:


bnk>template<typename M> void Propagate(Test * r, M m)

bnk>{
bnk> (r->*m)(r);
bnk>}

пофиг на звездочки, а вот со скобочками компилится! :)
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.