考慮以下兩類:模板的成員變量
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
類。 寫這樣一個模板可能嗎?
如果可能,我寧願避免模板專門化。有沒有辦法解決它?感謝你的回答! – chessofnerd
@chessofnerd除非您想直接在'LunchBox'或'ClassRoom'上實現訪問器方法,否則不行。對於給定的「T」,必須有一些方法來查看訪問器。 – cdhowie
這就是我所害怕的。我希望你可以做一些像'auto accessorizedLunchBox = Accessor(lunchBox)'來指定要操作的成員變量。有沒有對這種語法的支持?如果有的話,我會很驚訝。 –
chessofnerd