Consider the following two classes:
class LunchBox
{
public:
std::vector<Apple> m_apples;
};
并且
class ClassRoom
{
public:
std::vector<Student> m_students;
};
这两个类相似之处在于它们都包含一个对象的向量成员变量;然而,它们不同之处在于向量的对象不同且成员变量具有不同的名称。
我想编写一个模板,将LunchBox
或ClassRoom
作为模板参数(或其他参数),以及一个现有的相同类型的对象(类似于std::shared_ptr
)。该模板将返回一个对象,添加了一个getNthElement(int i);
成员函数以改善访问方法。使用方法如下:
// lunchBox is a previously initialized LunchBox
// object with apples already pushed into m_apples
auto lunchBoxWithAccessor = MyTemplate<LunchBox>(lunchBox);
auto apple3 = lunchBoxWithAccessor.getNthElement(3);
我希望能够做到这一点,而不需要为每个类编写模板特化(这可能需要以某种方式指定要操作的成员变量)。最好不要修改LunchBox
或ClassRoom
类。是否可能编写这样的模板?
auto accessorizedLunchBox = Accessor<LunchBox.m_apples>(lunchBox)
这样指定要操作的成员变量。是否支持这种语法?如果有的话,我会感到惊讶。 - chessofnerdauto alb = [&lunchBox] (std::size_t i) { return lunchBox.m_apples[i]; };
- cdhowie