Это тривиально, чтобы получить размер поля структуры в С++, если у вас есть экземпляр структуры. Например. (Неоткомпилированные):
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 the size of the target field.)
}
Создание структуры в стеке должно быть быстрым и дешевым, но я подозреваю, что в обзоре кода я буду одет в него, поэтому я ищу лучший способ, который не вводит дополнительную нагрузку на обслуживание (например, #defines для размеров).