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.)
Ale gdzie chcesz mieć ten kontener? W Klasie? W Funkcji? Użyj szablonu po prostu.
Chcę właśnie napisać szablon kontenera przechowującego w tablicy elementy dowolnego typu.
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...
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.
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?
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ę.
@matek3005 w takim przypadku to raczej Unia a nie Klasa ;)
słusznie :) to nie zmienia faktu, że my możemy gdybać, a autorowi może chodzić o coś całkiem innego :)
boost::variant?
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:) )