枚举模板需要了解

时间:2015-03-24 17:16:46

标签: c++

这是我第一次遇到像这样的代码。在此代码中,不使用关键字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();
....
....
}

我有两个问题基于此

  1. 有什么需要使用枚举类型而不是使用<template typename>

  2. 为什么我在

    上收到编译错误
    SBatch<Thread>::SBatch(size_t max) : ParentClass<Thread>
    
  3. 我正在使用MingW gcc 64位。

2 个答案:

答案 0 :(得分:2)

  
      
  1. 需要使用枚举类型而不是使用<template typename>
  2.   

这只是一个non-type parameter

  
      
  1. 为什么我在

    上收到编译错误
    SBatch<Thread>::SBatch(size_t max) : ParentClass<Thread>
    
  2.   

你可能忘记了括号。

SBatch<Thread>::SBatch(size_t max) : ParentClass<Thread>()

答案 1 :(得分:1)

  
      
  1. 需要使用枚举类型而不是使用<template typename>
  2.   

模板可以通过三种方式进行参数化:

  • 类型
  • 非类型(基本上是指常数值)
  • 其他模板。

在这种情况下,它由T_Thread类型的常量值进行参数化。因此SBatch<EA>SBatch<EB>是模板的两个特化,具有不同的&#34;线程&#34;每个人的价值。

  
      
  1. 为什么我收到编译错误
  2.   

因为基类初始化程序错误;它必须提供构造函数参数:

SBatch<Thread>::SBatch(size_t max) : ParentClass<Thread>(args)
                                                        ^^^^^^

如果你希望它是默认初始化的,没有构造函数参数,那么要么给出一个空的参数列表(),要么完全保留初始化。