wielkość klasy szablonowej

0

uproszczony kod.

template<int size>
class klasa
{
    int value;
    public :
    klasa(int v)
    {
        value = v;
    }
}

int main()
{
    int x = 3;
    klasa<x> obiekt(5);
    return 0;
}

i wywala błąd że x musi być const. Da się na to jakoś zaradzić ?

Bo mam gotową klasę szablonową ale jej wielkość (czyli ten x) nie będzie stały - zmienny podczas działania programu. I nie wiem jak to razem połączyć.

0

Nie da się / szablony w C++ nie działają tak jak myślisz. Dlaczego nie może być to jeden z argumentów konstruktora?

0

Nie da się. Szablony to coś, co działa na etapie kompilacji. Podczas uruchomienia nie ma już żadnych szablonów tylko skompilowany kod, który został z nich wygenerowany. Żeby Twój kod się skompilował x musi być const.

Może powiedz nam co Ty próbujesz zrobić? Wydaje mi się, że póki co źle się do tego zabierasz.

0

Czyli trzeba kombinować...
No mam klasę szablonową <int> i chcę mieć jej 'x' obiektów.

Mogę ją zmodyfikować ale nie wiem czy po prostu zrezygnować całkiem z szablonów i zrobić po prostu tablice wskaźników do obiektów czy jest jakiś inny sposób na to :)

Szablonów na co dzień nie używam i nie ogarniam tematu za bardzo, w ogóle dziwna to rzecz np. mam również problem ze zwracanie obiektu takiej klasy z funkcji...To akurat mogę doczytać ale tak przy okazji fajnie jak by ktoś mały przykład pokazał.

0

nie wiem o co Ci chodzi ale to brzmi jak zwykły vector

0

krwq : Być może :)

Może inaczej zadam pytanie, widząc klasę z 1 postu chcecie mieć dynamiczną ilość jej obiektów.

Jak ją modyfikujecie ?

0
ulow102 napisał(a):

krwq : Być może :)

Może inaczej zadam pytanie, widząc klasę z 1 postu chcecie mieć dynamiczną ilość jej obiektów.

Jak ją modyfikujecie ?

Tworzymy tablicę obiektów, wektor lub listę. Do tego nie wykorzystuje się szablonów.

0

Czy takie cos rozwiazuje Twoj problem?

#include<vector>

using namespace std;

int main() {
  vector<int> v1(10, 1); // tablica 10ciu jedynek
  vector<int> v2; // pusta tablica
  v1.push_back(5); // dodaje 5 na koncu tablicy
  v1.resize(100, 2); // rozszerza tablice do rozmiaru 100, wszystkie pola ktore byly niezainicjalizowane maja teraz wartosc 2
  // przyklad uzycia tablicy:
  for (size_t i = 0; i < v1.size(); i++) {
    // jakies operacje na v1[i]
  }
  return 0;
}

reszte juz sobie doczytaj

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