我正在寫一個容器模板的實例,聲明來自同一類型的變量作爲模板
template <typename T, typename S>
class Container
{
public:
S size(void) const { return mItems; }
private:
S mItems;
S mMaxItems;
T *mArray;
};
而在代碼中,我想這樣做:
Container<Rooms, int> RoomCtr;
for(RoomCtr::type i = 0; i < RoomCtr.size(); i++)
{
}
所以該變量與S
類型匹配,沒有指定int
硬編碼。
這可能嗎?
我迄今發現的唯一方法是這樣的:
template <typename T, typename S>
class Container
{
S type(void) const { return 0; }
...
};
for(decltype(Table.type()) i = 0; i < RoomCtr.size(); i++)
{
}
我不知道是否有更好的方法。或者這是否是正確的方法?
我目前使用Visual Studio 2010中
什麼是'Rooms'?容器的大小? – ForceBru
請注意,如果'type()'函數僅用於未評估的上下文中,則不需要定義,因爲「decltype」的操作數是。 – Quentin
是的,你需要使用decltype。或者像你一樣,或者如果'Container'包含'typedef S Type;'作爲'decltype(Table):: Type'。這可能是最接近內省的。 – Peter