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

How can I implement a class which can passed as a template argument?

本文关键字:参数传递 一个 何实现 实现      更新时间:2023-10-16

我想实现一个类,称之为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
{
};

有人能帮助我了解实施情况吗?

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

想想std::vector的一个实现。它有一个内部数组,但是什么类型的?可以指定该类型作为模板参数。

在您的类中,您声明类型为typename T::counter_type的计数器(请参阅此处了解有关typename的更多信息:何时需要"typename"关键字?),然后您有一个将计数器初始化为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>

相关文章: