我想实现一个类,将其称为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
{
};
任何人都可以帮我理解实施吗?
答案 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>
。