• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Metoda klasy jako parameter pack.

Object Storage Arubacloud
0 głosów
180 wizyt
pytanie zadane 2 marca 2016 w C i C++ przez 0xf Dyskutant (8,180 p.)

Dobry wieczor. 

Wlasnie sobie pisze klase. Ta klasa bedzie miala metode. Ta metoda bedzie parameter pack'iem. 

Problem w tym ze chyba zle ich uzywam cala moja wiedza o parameter pack'ach pochodzi z przykladow na stack overflow. 

Oto kod : 

template<typename T, typename... Rest> void TabelaPostgre::create(T& x, Rest... rest)
{
    string sql="CREATE TABLE"+x;
    work W(C);
    W.exec(sql);
    W.commit();
}

int main()
{
    cout<<"hehe"<<endl;
    TabelaPostgre *Obiekt=new TabelaPostgre("TestDB","postgres","haselko","127.0.0.1","5432");
    Obiekt.create<string>("kkk");
delete Obiekt;

    return 0;
}

Ten kod nie dziala. 

Przy okazji zapytam sie czy dobrze usuwam obiekt. Bo o ile sie nie myle usuwam tylko sam obiekt a zostawiam wzkaznik na niego. 

Pozdrawiam.

1 odpowiedź

0 głosów
odpowiedź 2 marca 2016 przez MetGang Nałogowiec (34,360 p.)

Co do new i delete to nie widzę nic niedozwolonego.

Co do samej funkcji rozumiem, że tworzy ona nowe tabele? Każdy kolejny argument to nowa tabela? Funkcje z parameter packiem maja to do siebie, że trzeba je wykonywać rekurencyjnie, więc trzeba stworzyć, że tak to ujmę - przypadek ostateczny.

template <typename T> void TabelaPostgre::Create(T&& Arg)
{
    // kod obsługi Postgre przy użyciu Arg
}

template <typename T, typename... Ts> void TabelaPostgre::Create(T&& Arg, Ts&&... Args)
{
    // kod obsługi Postgre przy użyciu Arg
    Create(std::forward<Ts>(Args)...);
}

Jakoś tak to powinno wyglądać.

komentarz 2 marca 2016 przez 0xf Dyskutant (8,180 p.)
Wlasnie ta funkcja ma tworzyc nowa tabele, tabela moze miec wiele wartosci w sensie moze byc ID, DataUrodzenia, NumerDowodu... . Wiec liczba parametrow jest zmienna.
komentarz 2 marca 2016 przez MetGang Nałogowiec (34,360 p.)
Tak średnio rozumiem. Jeśli każdy argument funkcji jest osobną zmienną w SQL to jaki jest sens jest rozbijania tego na argumenty skoro można w jednym stringu?
komentarz 2 marca 2016 przez 0xf Dyskutant (8,180 p.)
CREATE TABLE nba (id int NOT NULL AUTO_INCREMENT, imie char(30), lata char(3), punkty char(3), mistrzostwa char(3), PRIMARY KEY(id));

Zeby nie pisac ciagle kodu w sql wole sobie napisac metode klasy za pomoca ktorej moge tworzyc dowolna tabele. Zauwaz ze tabela moze miec rozne wartosci. I zamiast pisania kodu sql moge sobie uzyc tej metody jakos pokombinuje i argumentamami bedzie nieokreslona liczba tablic o dwoch indeksach 0 i 1 w indeksie 0 bede trzymal nazwe a w indeksie 1 typ np. 

Costam[0]=id;

Costam[1]=int NOT NULL AUTO_INCREMENT;

komentarz 2 marca 2016 przez 0xf Dyskutant (8,180 p.)
Ulatwiam sobie. Wiem ze moge uzywac jezyka sql i w sumie na to samo mi wychodzi ale najzwyczajniej bardziej mi podchodzi napisanie raz metody niz potem zasmiecanie kod zmiennymi lokalnymi : string kod_sql="/*Jakis kod w SQL*/";

Podobne pytania

–1 głos
1 odpowiedź 327 wizyt
pytanie zadane 21 marca 2016 w C i C++ przez 0xf Dyskutant (8,180 p.)
0 głosów
1 odpowiedź 177 wizyt
0 głosów
1 odpowiedź 151 wizyt
pytanie zadane 24 czerwca 2018 w C i C++ przez Programmingc100 Bywalec (2,620 p.)

92,677 zapytań

141,581 odpowiedzi

320,061 komentarzy

62,039 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...