从具有可变参数的模板类继承

inheriting from a templates class with variable parameters

本文关键字:继承 参数 变参      更新时间:2023-10-16

我有此代码:

  template<char ...T>
  class base
  {
       std::array<uint8_t, ID_SIZE> m_ID = { Ts... };
  }
  template<char ...T>
  class derived: public base<T>
  {
       // this class doesn;t need to know anything about T
  }

编译此代码时,我会收到此错误:

  'T': parameter pack must be expanded in this context  

这个错误是什么,我如何解决?

多个模板参数(类型或非类型)不能作为包装传递,但必须每次都被打开包装:

template<char ...T>
class base { }
template<char ...T>
class derived: public base<T...> // unpack
{      
}

base<>的内部将在T。

的背景下重新包装参数

T不是一种类型,它是"参数包"的名称。

base<T>是荒谬的,因为base需要类型的列表,而不是一包类型。base<T...>将按照您的期望解开类型和工作。