我正在写一个容器模板,
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。
答案 0 :(得分:2)
你可以做一个简单的typedef
:
template <typename T, typename S>
class Container {
T *data;
/* other variables */
public:
typedef S size_type;
Container();
};
int main() {
Container<char, int>::size_type something;
}
此处something
的类型为int
。
答案 1 :(得分:0)
您可以使用typedef来解决您的问题。 E.g:
// Example program
#include <iostream>
#include <string>
template <typename T, typename S>
class Container
{
public:
S size(void) const { return mItems; }
private:
S mItems;
S mMaxItems;
};
struct A
{
//empty
};
int main()
{
typedef int SomeType;
Container<A, SomeType> RoomCtr;
for(SomeType i = 0; i < 10; i++)
std::cout << i << std::endl;
}
您还可以使用typedef显式保留类中的类型。 E.g:
// Example program
#include <iostream>
#include <string>
template <typename T, typename S>
class Container
{
public:
typedef S SomeType;
S size(void) const { return mItems; }
private:
S mItems;
S mMaxItems;
};
struct A
{
//empty
};
int main()
{
typedef int MyType;
Container<A, MyType> roomCtr;
Container<A, MyType>::SomeType j = 0;
std::cout << j << std::endl;
}
答案 2 :(得分:0)
将typedef与decltype结合使用:
PagdList[timeReportLib.user]