Могу ли я получить размер поля структуры без создания экземпляра структуры?

Получить размер поля структуры в 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 для размеров).

29
задан Greg D 15 September 2010 в 14:59
поделиться