14
W języku C++ istnieje jakiś sposób na umieszczenie czegoś na liście tymczasowej w liście inicjalizacji. Chcę zainicjować dwa stałe elementy z tą samą instancją czegoś, bez konieczności przekazywania tego, usuwać wymaganie const, używać Factory (tzn. Przekazywać je, ale mieć fabrykę, aby je ukryć przed użytkownikiem API), lub have temp jest zmienną składową.Zmienne tymczasowe C++ na liście inicjowania
tj. coś
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
}
}
zamiast
Class Baz{
Foo f;
Bar b;
Baz(Paramaters p){
Something temp(p);
f = Foo(p,temp)
b = Bar(p,temp)
}
}
lub
Class Baz{
Foo f;
Bar b;
Baz(Paramaters p,Something s):f(p,s),b(p,s){
}
}
Nicea. Niestety, nie sądzę, że chcę, aby to zależało od C++ 11, tylko unikaj tego problemu. Jest to biblioteka i wyobrażam sobie, że niektórzy ludzie mogą sprzeciwić się jej integracji, gdyby musieli zacząć używać C++ 11 – imichaelmiers
@imichaelmiers: Rozumiem. Czy masz kontrolę nad definicją 'Something',' Foo' i 'Baz'? Na przykład, czy mógłbyś dodać funkcję członka do 'Foo', który zwraca obiekt' Something', z którym został skonstruowany? (abyś mógł go użyć w inicjalizacji 'b' jako' b (p, f.get_something()) ' –