Временные переменные С++ в списке инициализации - программирование
Подтвердить что ты не робот

Временные переменные С++ в списке инициализации

В С++ существует ли способ иметь что-то вроде временной переменной в списке инициализации. Я хочу инициализировать два постоянных члена с одним и тем же экземпляром чего-либо, не передавая это что-то, удалить требование const, использовать Factory (т.е. Передать его, но Factory сгенерировать его, чтобы скрыть его от API пользователь), или temp фактически является переменной-членом.

т.е. что-то вроде

Class Baz{
    const Foo f;
    const Bar b;
    Baz(Paramaters p):temp(p),f(p,temp),b(p,temp){ //temp is an instance of Something
                                                  // But NOT A member of Baz
    // Whatever
    }
}

вместо

Class Baz{
    Foo f;
    Bar b;
    Baz(Paramaters p){
        Something temp(p);
        f = Foo(p,temp)
        b = Bar(p,temp)
    }
}

или

Class Baz{
    Foo f;
    Bar b;
    Baz(Paramaters p,Something s):f(p,s),b(p,s){
    }
}
4b9b3361

Ответ 1

В С++ 11 вы можете использовать делегирующие конструкторы:

class Baz{
    const Foo f;
    const Bar b;
    Baz(Paramaters p) : Baz(p, temp(p)) { } // Delegates to a private constructor
                                            // that also accepts a Something
private:
    Baz(Paramaters p, Something const& temp): f(p,temp), b(p,temp) {
        // Whatever
    }
};