如何实现一个可以作为模板参数传递的类?

时间:2015-12-06 23:56:48

标签: c++ class templates

我想实现一个类,将其称为K,它将作为模板类C的模板参数传递时进行编译。以下是代码示例:

template <typename T>
class C 
{
    typename T::counter_type counter;
public:
    C() : counter(0) {}
    void Do (T t) 
    {
        if (t>0) ++counter;
    }
};

class K
{

};

任何人都可以帮我理解实施吗?

1 个答案:

答案 0 :(得分:0)

你拥有的是模板类。 template参数基本上是一种定义内部数据类型类型的数据类型。

考虑一下std :: vector的实现。它有一个内部数组,但是什么类型?好吧,您可以将该类型指定为模板参数。

在你的类中,你声明类型为typename T::counter_type的计数器(请参阅此处有关typename的更多信息:When is the "typename" keyword necessary?),然后你有一个构造函数将计数器初始化为0和方法Do,采用类型为T的参数(在对象声明中指定)并对其执行某些操作。

将模板视为速记。而不是:

class C_int
{
    int counter;
public:
    C() : counter(0) {}
    void Do (int t) 
    {
        if (t>0) ++counter;
    }
};

class C_long
{
    long counter;
public:
    C() : counter(0) {}
    void Do (long t) 
    {
        if (t>0) ++counter;
    }
};

您现在分别拥有C<int>C<long>