Получить размер поля структуры в C ++ тривиально, если у вас есть экземпляр структуры. Например (некомпилированный):
typedef struct Foo {
int bar;
bool baz;
} Foo;
// ...
Foo s;
StoreInSomething(s.bar, sizeof(s.bar)); // easy as pie
Теперь я все еще могу делать что-то подобное, но с интерфейсом, который я реализую (я получаю 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 для размеров).