我有这个我认为应该有效的代码,但这不是!
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转换为数组。