Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako izbrisati stringstream ? -- HELP PLEAS

[es] :: C++ programiranje :: Kako izbrisati stringstream ? -- HELP PLEAS

[ Pregleda: 763 | Odgovora: 8 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

_SASA_

Član broj: 99915
Poruke: 24
*.siemens.at.



Profil

icon Kako izbrisati stringstream ? -- HELP PLEAS29.11.2006. u 10:56

Ovo mi je kod:
Code:

  //trace minLenghtValue_ is it is set
  stringstream sMinValue;
  if (isMinValueSet() == true)
  {
    int minValue = getMinLength();
    sMinValue << "minLengthValue_: " << minValue;
  }
  else
  {
    sMinValue << "minLengthValue_: " << "IS NOT SET!!!";
  }
  TRC_DEBUG_VAR( sMinValue.str() ));


TRC_DEBUG_VAR mi je macro.

i htio bih poslije "TRC_DEBUG_VAR( sMinValue.str() ));" nekako izbirati "stringstream sMinValue;" tako da ga poslje ne mogu vise koristiti...

HVALA
29.11.2006. u 10:56 

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 327
*.fibertel.com.ar.



Profil

icon Re: Kako izbrisati stringstream ? -- HELP PLEAS29.11.2006. u 11:46
Ovo zavisi od toga sta hoces jer nisi bio dovoljno precizan u pitanju.

Ako hoces da obrises sadrzaj sMinValue onda se to radi ovako:
Code:
sMinValue.str("");


Ako hoces da sMinValue postoji samo u datom delu koda i posle se automatski obrise onda ovako:
Code:
{ //obratiti paznju na pocetak bloka
  stringstream sMinValue;
  sMinValue << "minLengthValue_: ";
  if (isMinValueSet()) {
    sMinValue << getMinLength();
  }
  else{
    sMinValue << "IS NOT SET!!!";
  }
  TRC_DEBUG_VAR( sMinValue.str() ));
} //kraj bloka posle ovoga sMinValue vise ne postoji

Tko leti vrijedi
29.11.2006. u 11:46 

_SASA_

Član broj: 99915
Poruke: 24
*.siemens.at.



Profil

icon Re: Kako izbrisati stringstream ? -- HELP PLEAS29.11.2006. u 12:33
Ako hoces da sMinValue postoji samo u datom delu koda i posle se automatski obrise onda ovako:
Code:

{ //obratiti paznju na pocetak bloka
  stringstream sMinValue;
  sMinValue << "minLengthValue_: ";
  if (isMinValueSet()) {
    sMinValue << getMinLength();
  }
  else{
    sMinValue << "IS NOT SET!!!";
  }
  TRC_DEBUG_VAR( sMinValue.str() ));
} //kraj bloka posle ovoga sMinValue vise ne postoji


Ovo sto si mi napisao bi mi pomoglo, palo je i meni napamet to rijesenje, samo mi pari malo nezgrapno.

Mislio sam da li postoji nacin da pozovem destruktor od stringstream -a, ber bih morao staviti {} na jedno 10-tak mjesta u funkciji a to mi par malo ruzno za vidjeti...
29.11.2006. u 12:33 

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 2712
*.3dnet.co.yu.

Jabber: xfiles@elitesecurity.org
Sajt: www.antivari.com


Profil

icon Re: Kako izbrisati stringstream ? -- HELP PLEAS29.11.2006. u 13:24
Citat:

Mislio sam da li postoji nacin da pozovem destruktor od stringstream -a.

Upravo je to ono što ti je kiklop74 i savetovao.

Destruktor za stringstream, tj. za sMinValue se poziva automatski,
hteo ne hteo, odmah nakon završetka bloka:
Code:

{
  stringstream sMinValue;
  // ...
} <--- OVDE


Možda jeste neobično, ali je vrlo primenljivo i jasno.

FREEWARE
Di rečnik, v1.0.058 (srp-eng/eng-srp priručni rečnik)
http://www.antivari.com
29.11.2006. u 13:24 

_SASA_

Član broj: 99915
Poruke: 24
*.siemens.at.



Profil

icon Re: Kako izbrisati stringstream ? -- HELP PLEAS29.11.2006. u 13:43
Dobro krivo sam rekao, kako pozvati destruktor od stringstream samostalno a ne automatski ?

jasan je meni bio njegov kod
to je ko da napisem
Code:

{
  int jozo = 4;
}
// sada jozo ovdje ne postoji


nego me znaima kako bi mogao unistiti jozu bez toga da ga stvaim unuta "{ }" ?
29.11.2006. u 13:43 

Goran Arandjelovic
Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 248
*.dynamic.sbb.co.yu.

Jabber: goranche@elitesecurity.org


Profil

icon Re: Kako izbrisati stringstream ? -- HELP PLEAS29.11.2006. u 15:30
Ako si ga već tako kreirao, moraćeš da čekaš da izađe iz bloka pa će se onda pozvati destruktor, kao što ti reče X Files.
Čini mi se da u stringstream-u postoji metod clear()... dakle mogao bi da uradiš sMinValue.clear()
ili da objekat sMinValue kreiraš na heapu i da ga obrišeš kada ti rešiš...
recimo...
stringstream *sMinValue = new stringstream;
// ovde nešto radiš...
delete sMinValue;

verovatno si na to mislio.
29.11.2006. u 15:30 

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 2712
*.216.237.0

Jabber: xfiles@elitesecurity.org
Sajt: www.antivari.com


Profil

icon Re: Kako izbrisati stringstream ? -- HELP PLEAS29.11.2006. u 16:37
Da, ovde je zapravo nejasno šta se misli pod "izbrisati" ili "uništiti" stringstream objekat.

Za kompajler (i naknadno korišćenje), objekat će biti "uništen" i nevidljiv odmah nakon
izlaska iz bloka.

U svim ostalim slučajevima objekat može biti "napunjen" podacima ili "prazan" i uvek je
vidljiv i dostupan.

http://www.cplusplus.com/ref/iostream/stringstream/
Videti metodu clear()

Ukoliko je cilj sprečiti "spolja" pristup stringstream objektu onda OOP i "private" mehanizam
može takođe da posluži.

FREEWARE
Di rečnik, v1.0.058 (srp-eng/eng-srp priručni rečnik)
http://www.antivari.com
29.11.2006. u 16:37 

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 327
*.iplannetworks.net.



Profil

icon Re: Kako izbrisati stringstream ? -- HELP PLEAS30.11.2006. u 13:03
Inace je besmisleno koristiti stringstream samo zarad jednog trace jer ta klasa se ne odlikuje nekom posebnom brzinom i relativno je teshka.

Ja bih, na primer uradio neshto drugo:
Code:
#include <vector>
#include <cstdlib>
#include <windows.h>

#ifndef TRACE
#define TRACE OutputDebugString
#endif

int getMinLength() {return 2;}

void traceTest(bool condition) {
  std::vector<char> sBuff(100,'\0');
  if (condition) {
    std::sprintf(&sBuff[0],"minLengthValue_: %d\n",getMinLength());
  } else {
    std::sprintf(&sBuff[0],"minLengthValue_: IS NOT SET\n");  
  }
  TRACE(&sBuff[0]);
}

int _tmain(int argc, _TCHAR* argv[])
{
  traceTest(true);
  traceTest(false);
  return EXIT_SUCCESS;
}

Tko leti vrijedi
30.11.2006. u 13:03 

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 327
*.iplannetworks.net.



Profil

icon Re: Kako izbrisati stringstream ? -- HELP PLEAS01.12.2006. u 13:35
Posle malo razmisljanja o problemu shvatio sam da je mnogo bolje imati implementaciju stream klase koja ce tekst da preusmerava na trace funkciju. Kao rezultat toga napisao sam tracestream klasu.

Zainteresovani mogu da je preuzmu odavde: http://cablemodem.fibertel.com.ar/mega/traceStream.zip

Upotreba je vrlo jdnostavna:

Code:

#include "debuglog_stream.h"

tracestream sout; //ovo je verzija sa obicnim stringovima char*
                         //postoji i unicode verzija wtracestream

void testfn () {
  sout << "probna poruka " << 222 << std::endl;
}

Tko leti vrijedi
01.12.2006. u 13:35 

[es] :: C++ programiranje :: Kako izbrisati stringstream ? -- HELP PLEAS

[ Pregleda: 763 | Odgovora: 8 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.