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

Получить размер поля структуры в 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 для размеров). Я пробовал: if (App.Servers [index] .ServerState == "Enabled") { ...

Я разрабатываю приложение WP7, и этому приложению необходимо изменить значок кнопки на панели приложения в зависимости от состояния запроса. Я пробовал:

if (App.Servers[index].ServerState == "Enabled")
{
  DetailsAppBar.btnStart.IconUri = new Uri("/AppBar/appbar.stop.rest.png");
}

else
{
  DetailsAppBar.btnStart.IconUri = new Uri("/AppBar/appbar.transport.play.rest.png");
}

Это не вызывает ошибок в коде, но он не может скомпилироваться .... приветствуются любые подсказки для этого :)

спасибо

5
задан Brent Stewart 14 November 2012 в 22:14
поделиться