Consider the following struct:
struct IPv6Address {
uint8_t x[16];
uint8_t& operator[](size_t pos) { return x[pos]; }
uint8_t* bytes() { return x; }
}
static const IPv6Address WELL_KNOWN_ADDRESS = //ff02::1
{0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01};
这样的大括号初始化是有效的。但是一旦我添加了构造函数,大括号初始化就不再起作用了。我希望在保留大括号初始化的同时也能使用这个构造函数:
IPv6Address(uint8_t bytes[16]) { memcpy(x, bytes, sizeof(x)); }
显然,一旦我添加了自己的构造函数,就不再隐式定义任何构造函数。但是,在这种情况下,如何重新定义花括号初始化或强制编译器创建所有默认构造函数呢?
额外要求:由于我正在为嵌入式应用程序编程,因此无法使用stdlib。
使用IPv6Address = std::array<uint8_t, 16>;
。 - Max LanghofIPv6Address(std::initializer_list<uint8_t>)
难道不是OP想要的吗? - Algirdas PreidžiusIPv6Address(uint8_t const bytes[16])
,而非IPv6Address(uint8_t bytes[16])
。对于索引也是如此:通常支持 const 是个好主意。 - Cheers and hth. - Alf