Я начинающий программист на C ++, но думал, что знаю о C ++ достаточно, до сегодняшнего дня, когда я наткнулся на такой код на работе и не смог понять, как он на самом деле работает.
class Object
{
};
template <
class PropObject,
class PropType,
PropType PropObject::* Prop
>
class PropReader
{
public:
void print(Object& o)
{
PropObject& po = static_cast<PropObject &>(o);
PropType& t = po.*Prop;
cout << t << "\n";
}
};
class Student : public Object
{
public:
int age;
int grade;
};
int _tmain(int argc, _TCHAR* argv[])
{
Student s;
s.age = 10;
s.grade = 5;
PropReader<Student, int, &Student::age> r;
PropReader<Student, int, &Student::grade> r2;
r.print(s);
r2.print(s);
}
Я думаю, что я любезен из понятых на высоком уровне. Но этот конкретный PropType PropObject :: * Prop
в объявлении шаблона меня беспокоит. Что это означает? Ищу объяснение от экспертов по C ++. Я хотел бы понять это, чтобы лучше использовать. Хотя это выглядит очень полезным.