boost :: optional <> в объединении?

У меня есть необязательная структура POD, которая будет содержаться внутри объединения.
boost :: optional хранит свой тип по значению, поэтому я подумал, что это может сработать:

union helper
{
    int foo;
    struct 
    {
        char basic_info;
        struct details {
            //...
        };

        boost::optional
extended_info; } bar; // ... }; helper x = make_bar(); if( x.bar.extended_info ) { // use x.bar.extended_info->elements }

но VS2008 пожаловался, что моя структура bar теперь имеет конструктор копирования из-за элемента boost :: optional

.

В качестве замены я Мы добавили логический флаг, чтобы указать, действителен ли необязательный параметр, но он неуклюжий:

union helper
{
    int foo;
    struct 
    {
        char basic;
        struct details {
            bool valid;
            //...
        } extended;
    } bar;
    //  ...
};

Я подумывал о реализации details :: operator bool () для возврата details :: valid , но это неясно и оказывает медвежью услугу человечеству.
boost :: optional четко документирует синтаксис и намерение и не требует детективной работы.

Наконец, объединение помощника должно быть POD, поэтому я не могу выполнять какое-либо динамическое распределение - в противном случае я бы использовал указатель.

Любые предложения для чего-то синтаксически похожего на boost :: optional , который можно использовать в объединении?

5
задан mskfisher 12 January 2011 в 20:53
поделиться