Я начинающий программист на С++, но я думал, что знаю достаточно о С++ до сегодняшнего дня, когда натолкнулся на такой код на работе и не понял, как это работает.
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
в объявлении шаблона беспокоит меня. Что это значит? Я ищу объяснение от экспертов С++. Я хотел бы понять это, чтобы я мог использовать его лучше. Это выглядит очень полезно, хотя.