这是我第一次遇到像这样的代码。在此代码中,不使用关键字typename
,而是使用enumeration
类型。
代码看起来像这样。
enum T_Thread
{
EA,
EB,
EC,
ED
};
Header File
template<T_Thread Thread> <----Q1- I was expecting template<typename t>...
class SBatch : public ParentClass<Thread>
{
SBatch(size_t max);
....
....
};
Cpp File
template<T_Thread Thread>
SBatch<Thread>::SBatch(size_t max) : ParentClass<Thread> <--Q2. Compile Error : expected '(' before ','
{
......
......
}
父类看起来像这样
template <T_Thread Thread>
class ParentClass: public MParentClass<Thread>
{
public:
ParentClass();
....
....
}
我有两个问题基于此
有什么需要使用枚举类型而不是使用<template typename>
为什么我在
上收到编译错误SBatch<Thread>::SBatch(size_t max) : ParentClass<Thread>
我正在使用MingW gcc 64位。
答案 0 :(得分:2)
- 需要使用枚举类型而不是使用
醇><template typename>
这只是一个non-type parameter。
- 醇>
为什么我在
上收到编译错误SBatch<Thread>::SBatch(size_t max) : ParentClass<Thread>
你可能忘记了括号。
SBatch<Thread>::SBatch(size_t max) : ParentClass<Thread>()
答案 1 :(得分:1)
- 需要使用枚举类型而不是使用
醇><template typename>
模板可以通过三种方式进行参数化:
在这种情况下,它由T_Thread
类型的常量值进行参数化。因此SBatch<EA>
和SBatch<EB>
是模板的两个特化,具有不同的&#34;线程&#34;每个人的价值。
- 为什么我收到编译错误
醇>
因为基类初始化程序错误;它必须提供构造函数参数:
SBatch<Thread>::SBatch(size_t max) : ParentClass<Thread>(args)
^^^^^^
如果你希望它是默认初始化的,没有构造函数参数,那么要么给出一个空的参数列表()
,要么完全保留初始化。