Jeśli bieżący kompilator nie obsługuje jeszcze C++ 11, można zainicjować zawartość wektora przy użyciu standardowych algorytmów i funktory:
class sig
{
public:
sig()
{
struct Functor
{
Functor() : value(0) {};
int operator()() { return value++; };
int value;
};
std::generate(p_list, p_list + 4, Functor());
}
int p_list[4];
};
przykładowe Poprzednie fragment here.
Tak, jest trochę brzydka (przynajmniej dla mnie wygląda brzydko) i nie wykonuje pracy w czasie kompilacji; ale wykonuje pracę, której potrzebujesz w konstruktorze.
Jeśli potrzebujesz innego rodzaju inicjalizacji (inicjalizacja z liczbami parzystymi/nieparzystymi, inicjalizacja z losowymi wartościami, zacznij od wartości anotera, itp ...), musisz tylko zmienić Functor, a to jest jedyna zaleta to brzydkie podejście.
mam C++ 10. Musiałem więc zrobić to w trudny sposób. Dzięki za wszystkie twoje odpowiedzi. –
Czy sig(): deklarowanie konstruktora? Ta odpowiedź byłaby bardziej pomocna dla początkujących, jeśli pasowałaby do podstawowego układu pytania, abyśmy mogli zobaczyć, jak działa ten konstruktor. Czym jest puste '{}'? – GreenAsJade
Dlaczego nie ma ";" po inicjalizatorze? – GreenAsJade