如果你有一个结构的实例,那么在 C++ 中获取结构字段的大小是很简单的。例如。 (未编译):
typedef struct Foo {
int bar;
bool baz;
} Foo;
// ...
Foo s;
StoreInSomething(s.bar, sizeof(s.bar)); // easy as pie
现在我仍然可以做这样的事情,但是使用我正在实现的接口(interface)(我得到一个 BOOL,指示位域中特定位的状态应该是什么),我将创建结构仅用于获取数据成员的大小。有没有办法向编译器指示它应该使用结构字段的大小而不创建结构的实例?这将是哲学上的等价物:
SetBit(bool val) {
StoreInSomething(
BITFIELD_POSITION_CONSTANT, // position of bit being set
val, // true = 1, false = 0
sizeof(Foo::bar)); // This is, of course, illegal. (The method I've been told I must use req's the size of the target field.)
}
在堆栈上创建结构应该既快又便宜,但我怀疑我会在代码审查中对此感到厌烦,所以我正在寻找一种不会引入额外维护负担的更好方法(例如 #defines 大小)。
最佳答案
您可以使用如下表达式:
sizeof Foo().bar
由于 sizeof
的参数没有被评估,只有它的类型,没有实际创建临时。
如果 Foo
不是默认可构造的(与您的示例不同),则您必须使用不同的表达式,例如涉及指针的表达式。 (感谢 Mike Seymour)
sizeof ((Foo*)0)->bar
关于c++ - 我可以在不创建结构实例的情况下获得结构字段的大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3718910/