【发布时间】:2020-09-15 20:31:01
【问题描述】:
通常,我们可以通过以下方式创建结构的一个或多个实例:
struct
{
const uint8_t Address;
struct
{
uint8_t GPIO1 : N;
uint8_t GPIO2 : N;
uint8_t GPIO3 : N;
uint8_t GPIO4 : N;
uint8_t GPIO5 : N;
uint8_t GPIO6 : N;
uint8_t GPIO7 : N;
uint8_t GPIO8 : N;
} Value;
} Register1, Register2;
不幸的是,结构有模板时似乎不是这种情况(VSCode 给出语法错误):
template<uint8_t N = 1> struct
{
const uint8_t Address;
struct
{
uint8_t GPIO1 : N;
uint8_t GPIO2 : N;
uint8_t GPIO3 : N;
uint8_t GPIO4 : N;
uint8_t GPIO5 : N;
uint8_t GPIO6 : N;
uint8_t GPIO7 : N;
uint8_t GPIO8 : N;
} Value;
} <1>Register1, <2>Register2;
我想不出为什么不允许这样做。对于为什么不允许这样做,或者仅仅是因为标准中没有定义这种语法,是否有具体的答案?
编辑:
由于可以将其视为基于意见的问题,因此我想知道是否有类似的语法可以使用。
【问题讨论】:
-
结构类型是否非常需要匿名?
-
一个没有名字的类模板,你立即实例化并不觉得它应该是一个类模板。为什么不给它起个名字就可以了,比如this?
-
@jtbandes 不需要匿名结构。我可以称它为 Register,但不会在代码中的其他任何地方使用 Register 类型。它仅用于创建这些实例。我问这个问题是因为我很好奇:)
标签: c++ templates struct syntax non-type