[C++] Что означает такая конструкция

mama10001


struct Pnt
{
float q;
float q_aver;
};
class Conduct
{
public:
Pnt * points;
void getFieldTension ;
void E_from_qV (float Pnt::* pnt_q);
};
void Conduct::E_from_qV (float Pnt::* pnt_q)
{
float r = points->*pnt_q;
}
void Conduct::getFieldTension
{
E_from_qV(& Pnt::q);
}

float Pnt::* pnt_q ?

kokoc88

Указатель на член класса.

procenkotanya

pnt_q - это указатель на член типа float в классе Pnt
он как бы хранит смещение поля типа float в этом классе
соответственно может "иметь значение" (& Pnt::q) или (& Pnt::q_aver)
если pnt_q==& Pnt::q, то &(points->*pnt_q)==&(points->q)
если же pnt_q==& Pnt::q_aver, то &(points->*pnt_q)==&(points->q_aver)

psihodog

кстати, а давно такие штуки в С++?
чё-то в третьем издании "Языка С++" Страуструпа я такого не видел.

procenkotanya

давно
уж в третьем издании наверняка есть

mama10001

Спасибо, к сожалению в стандартных учебниках это отсутствует

rosali

к счаcтью в стандартных учебниках это отсутствует
потому что единственное применение этих member-pointers это написать boost/lambda Потом можно про них забыть. Ах, да: по-моему

margadon

в третьем есть. стр 475
Оставить комментарий
Имя или ник:
Комментарий: