Kontener i jego deklaracja.

0

Jak zadeklarować kontener, np. vector tak, aby przechowywał elementy dowolnego typu? Co zamiast, np. vector<int>, czy vector<klasa>?
(podałem przykładowe deklaracje, gdzie kontener przechowuje int lub klasę, a chcę żeby przechowywał dowolny typ danych.)

0

Ale gdzie chcesz mieć ten kontener? W Klasie? W Funkcji? Użyj szablonu po prostu.

0

Chcę właśnie napisać szablon kontenera przechowującego w tablicy elementy dowolnego typu.

0

aa, ty chcesz przechowywać obiekty RÓŻNYCH typów, czy DOWOLNEGO TYPU? Bo to jest spora różnica.
Jeśli opcja nr 1 to nie ma takiej możliwości (tzn jest, ale byłoby bardzo skomplikowane), a jeśli opcja nr 2 to przecież wszystkie STLowe kontenery są szablonowe.
Napisz jak człowiek o co ci chodzi...

0

Dowolnego, ponieważ chcę go potem użyć dla klasy, ale też dla typów liczbowych. Mam średnie pojęcie jeszcze o kontenerach, stąd moja przejawiająca się ignorancja.

0

Nadal nie rozumiem (i chyba nie tylko ja) co chcesz osiągnąć. Przecież vector możesz stworzyć zarówno dla typu liczbowego jak i dla klasy jakiejś. Więc po co jakieś próby implementacji własnego?

0

Dość niezrozumiałe pytanie... może chodzi mu o to, że chciałby skorzystać z jednego kontenera ( jednego "egzemplarza" ), do przechowywania elementów różnych typów ? Jeśli tak to w ten sposób tego nie zrobisz, chyba że upakujesz wszystkie typy, które chcesz w jakąś klasę czy strukturę.

0

@matek3005 w takim przypadku to raczej Unia a nie Klasa ;)

0

słusznie :) to nie zmienia faktu, że my możemy gdybać, a autorowi może chodzić o coś całkiem innego :)

0

boost::variant?

0

albo to co podal Świętowit, albo, jeżeli inne klasy używające twojego kontenera bedą trzymać w nim rózne elemnety -- ale DANA klasa bedzie trzymac JEDEN typ elementow, a INNA klasa - INNY, to mozesz uzyc prosto templateow

template<typename Element>
class MojaKlasaZVectorem
{
public:
    vector<Element> mojvector;
};

class Pierwsza
{
    MojaKlasaZVectorem<int> pole;
    void costam()
    {
        pole.mojvector.push_back(   5   );   // moge trzymac (tylko) int'y
    }
};

class Inna
{
    MojaKlasaZVectorem<pair<double, string>> pole;
    void costam()
    {
        pole.mojvector.push_back(  make_pair( 6.9, "dupa")  );  // ale inna moze juz trzymac (tylko) pair<double, string> !
    }
};

natomiast jeslibyc chcial, aby jedna li tylko klasa Pierwsza posiadala jedno li tylko "pole" bedace czyms co posiada jeden li tylko vector ktory to z kolei mialby umiec przechowywac N roznych typow danych w sobie -- to tylko boost::variant i jemu podobne, albo ---- wskazniki, + rtti, + polimorfizm, + etc. evil master plan to vector<void*>, tylko ze sie skichasz a sie nie dowiesz pozniej na-co-wskazujące wskazniki do niego wstawiles (tzn. chyba ze rtti uzyjesz:) )

1 użytkowników online, w tym zalogowanych: 0, gości: 1