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

Kako izbrisati stringstream ? (traceStream, output u Debug prozor)

[es] :: C/C++ programiranje :: Kako izbrisati stringstream ? (traceStream, output u Debug prozor)

[ Pregleda: 2162 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

_SASA_

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



Profil

icon Kako izbrisati stringstream ? (traceStream, output u Debug prozor)29.11.2006. u 10:56 - pre 212 meseci
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
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

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

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Kako izbrisati stringstream ? (traceStream, output u Debug prozor)29.11.2006. u 11:46 - pre 212 meseci
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
 
Odgovor na temu

_SASA_

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



Profil

icon Re: Kako izbrisati stringstream ? (traceStream, output u Debug prozor)29.11.2006. u 12:33 - pre 212 meseci
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...
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

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

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Kako izbrisati stringstream ? (traceStream, output u Debug prozor)29.11.2006. u 13:24 - pre 212 meseci
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.
 
Odgovor na temu

_SASA_

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



Profil

icon Re: Kako izbrisati stringstream ? (traceStream, output u Debug prozor)29.11.2006. u 13:43 - pre 212 meseci
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 "{ }" ?
 
Odgovor na temu

Goran Arandjelovic
Beograd

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



+9 Profil

icon Re: Kako izbrisati stringstream ? (traceStream, output u Debug prozor)29.11.2006. u 15:30 - pre 212 meseci
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.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

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

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Kako izbrisati stringstream ? (traceStream, output u Debug prozor)29.11.2006. u 16:37 - pre 212 meseci
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.
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

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

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Kako izbrisati stringstream ? (traceStream, output u Debug prozor)30.11.2006. u 13:03 - pre 212 meseci
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
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

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

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Kako izbrisati stringstream ? (traceStream, output u Debug prozor)01.12.2006. u 13:35 - pre 212 meseci
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
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
200.49.157.*

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Kako izbrisati stringstream ? (traceStream, output u Debug prozor)20.10.2008. u 19:26 - pre 189 meseci
Nova verzija traceStream implementacije se od juce moze preuzeti sa vec pomenute adrese.

Glavni novitet je dodatak singleton implementacije koja oslobadja programera obaveze da razmislja da li je i gde instancirao stream. Ovako je objekat inicijalizovan pri prvom pozivu i zivi dok se ne zatvori thread u kome je inicijalizovan.

Code:

/**
   singleton (dstream) je implementiran kao template klasa i ima 3 preddefinisane instance:
   
typedef dstream<char   > cdstream;
typedef dstream<wchar_t> wdstream;
typedef dstream<TCHAR  > tdstream;

*/

#include "debuglog_stream.h"

int main(void) {
    
  tdstream::dout() << TEXT("Test output ")
                   << 1 
                   << TEXT(" and now something different ")
                   << 1.2f
                   << std::endl;
  
  return 0;
}


Preuzeti odavde:
http://cablemodem.fibertel.com.ar/mega/traceStream.zip
Tko leti vrijedi
 
Odgovor na temu

[es] :: C/C++ programiranje :: Kako izbrisati stringstream ? (traceStream, output u Debug prozor)

[ Pregleda: 2162 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

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