通过drived类模板值通过基类构造器初始化基类数组成员变量



我有这个我认为应该有效的代码,但这不是!

 class base
 {
     std::array<uint8_t, 8> m_ID;
 public:
     base(std::array<uint8_t, 8> id) :m_ID(id)
     {
     }
 }
 template<char ...Ts>
 class derived:base(Ts...)
 {
 }
 class MyClass: public derived<'1','2','3','4','5','6','7','8'>
 {
 }

我该怎么做?这个想法是我可以从模板值传递ID值。

我遇到了MyClass不完整的错误。(不允许使用不完整的类型)

您只需要正确调用基类构造函数:

#include <array>
#include <cstdint>
 class base
 {
     std::array<std::uint8_t, 8> m_ID;
 public:
     base(std::array<std::uint8_t, 8> id) :m_ID(id)
     {
     }
 };
 template<char ...Ts>
 class derived: public base
 {
    public:
    derived() : base{ { Ts... } } { }
 };
class MyClass: public derived<'1','2','3','4','5','6','7','8'>
 {
 };
 int main() {
    MyClass d;
 }

请注意,在构造函数初始化列表中,需要内部对括号来将单个uint8_t s转换为数组。

最新更新