声明与该模板的实例相同类型的变量

时间:2016-04-06 12:49:14

标签: c++ templates

我正在写一个容器模板,

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。

3 个答案:

答案 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]