dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

Māca citus, part 1.
Goto page Previous  1, 2, 3, 4  Next
 
dev.gamez.lv Forum Index -> Programmēšana
View previous topic :: View next topic  
Author Message
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Tue Feb 14, 2006 7:59 pm    Post subject:

Ok.Vienkarshi liksim to c_str() mieraa un izmantosim vienkarshi aa="aaa"; (ka jau normali cilveki ari dara) un miers un beerzinsh.

Un sho tabulu es gribeju atstat ka pedejo:

Quote:
char un sprint f plusi:
-atrs (performance nevis programmeeshanas zinjaa)
-neaiznjem tos leikos 4KB
-var pa tiesho stradat ar atminju nevis caur visadiem c_str() (kas arii prasa laiku un kaa jau mineejo ieprieksh-vari paarrakstiit paari bufer robezham).

minusi:
-vairak program rindinju (lidz ar to aiziet vairak laika lai uzprogrammeetu)
-fikseets lielums (kuru char* gadiijumaa var mainiit ar realloc)

string plusi:
-atri programmeejaas (ietaupaas laiks)
-dinamisks buferis
-laikam tomeer iesaaceejiem sho buus vieglaak saprast nekaa char[]

minusi:
-bija man te paris kljumes ar sho (piemeram,nestradaj,ja eksportee klasi no dll (_declspec(dllexport)) un vel 99 warningi,ja liku vinju klasee,kura ir zem citaam klaseem (atkal aizmirsu kaa tas saucaas))
-kriit performance
-liekie 4KB

_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
BHC



Joined: 31 Jan 2006
Posts: 81

PostPosted: Tue Feb 14, 2006 8:05 pm    Post subject:

Lai tā būtu. (miera labad)
Kaut gan daži plusi un mīnusi man liekas "exceptionally" uzjautrinoši. :D

Amba.
_________________
Screenshot coming when hell freezes over.
Back to top
View user's profile
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Wed Feb 15, 2006 12:05 pm    Post subject:

Man veel peedeejais skaamais/jautaajums:
Kaa jau visiem zinaams-Microsoft Platform SDK izmanto funkcijas,kuru kaa string izmanto LPSTR.Taatad,lai izmantotu sho funkciju ar string klasi ir jaadara taa (ja nekljuudos):
Code:

char aa[MAX_PATH];
string str;

Funkcija(aa);
str=aa;

Tulit saksies lielaa bljaushana,bet shis kods diezvai straadaatu:
Code:

string str;
Funkcija(str.c_str());

Taapeec jau es to c_str() teemu aiztiku,bet sapratu tomeer ka laikam pirmais variants buus vieniigais un nekaadas variaacijas ar to c_str() nesanaaks.Taatad ar string tomeer iznaak rakstiit garaak (pirmais piemeers).Vai arii es kljuudos?
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Wed Feb 15, 2006 9:16 pm    Post subject:

Tu joprojām nesaprati. Neiet runa par WinAPI funkciju atgrieztajiem datiem (tie pie tam tiek atgriezti C, nevis C++ stilā).
Ar buferi nevajag veigt "stringiskas" operācijas - konkatenēšanu, formatēšanu un tml...
Tavam WinAPI koda piemēram nav ne vainas.
Šādā piemērā string klasi vispār nevar izmantot, jo kā jau pats saproti c_str() atgriež pointeri uz const char'iem.
Back to top
View user's profile Send e-mail
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Wed Feb 15, 2006 9:50 pm    Post subject:

Quote:
Neiet runa par WinAPI funkciju atgrieztajiem datiem


Es visu sapratu.Bet, ja reiz izmanto "WinAPI funkcijas atgrieztos datus", tad rakstit sanak garak.
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Feb 26, 2006 12:14 am    Post subject:

Nejauši uzdūros netā rakstam tieši par šo tēmu: http://www.gotw.ca/publications/mill19.htm
Back to top
View user's profile Send e-mail
BHC



Joined: 31 Jan 2006
Posts: 81

PostPosted: Sun Feb 26, 2006 1:52 am    Post subject:

bubu wrote:
Nejauši uzdūros netā rakstam tieši par šo tēmu: http://www.gotw.ca/publications/mill19.htm

Burvīgs. Daudz pilnīgāk, skaidrāk un argumentētāk uzrakstīts nekā man. Very Happy
_________________
Screenshot coming when hell freezes over.
Back to top
View user's profile
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Sun Feb 26, 2006 11:00 am    Post subject:

Perfekti.Viss skaidri un gaishi tabulaa izlikts.Un luuk arii tas-Easy to use, good code clarity:sprintf() - yes,std:stringstream - no
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Feb 26, 2006 1:23 pm    Post subject:

Atkal gribi sākt kašķēties? :)
Izlasi pārējo tabulas daļu - sprintf: Length safe, Type safe, Usable in template = No
stringstream = yes.
Back to top
View user's profile Send e-mail
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Sun Feb 26, 2006 8:15 pm    Post subject:

Nee nee.Es saprotu,ka tas ir nedroshi utt,bet gribu pasviitrot BHC teikto:
Quote:
4. Galu galā, tas ir vienkārši neērti un nepareizi.

Ok viss!
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
BHC



Joined: 31 Jan 2006
Posts: 81

PostPosted: Sun Feb 26, 2006 10:52 pm    Post subject:

elvman wrote:
Nee nee.Es saprotu,ka tas ir nedroshi utt,bet gribu pasviitrot BHC teikto:
Quote:
4. Galu galā, tas ir vienkārši neērti un nepareizi.

Ok viss!

Manā uztverē nedroši automātiski nozīmē, ka neērti un nepareizi.
Length safe, Type safe, Usable in template = No - neērts ir tas, ka viegli ielaist kļūdu un relatīvi grūti to detektēt. Tu saki, ka tas ir ērti?

Quote:
Ok viss!

Ok viss!
_________________
Screenshot coming when hell freezes over.
Back to top
View user's profile
gazz



Joined: 03 Jan 2004
Posts: 355
Location: Teika

PostPosted: Tue Mar 28, 2006 9:05 pm    Post subject:

taaks, esmu uzduuries konkreetai probleemai: unicode un stl. Izmantoju MS VC7. Ideja bija uztaisiit pavisam elementaaru logotaaju. Vainiigaa Logger klases metode izskataas shaadi:
Code:
      static void LogInfo(LPWSTR text) {
         // dabuujam laiku
         SYSTEMTIME time;
         GetLocalTime(&time);

         std::wostringstream outputStream;
         outputStream << "[" << time.wHour << ":" << time.wMinute
            << ":" << time.wSecond << "] INFO: " << text << endl << ends;
         OutputDebugStr(outputStream.str().c_str());
         if (instance!=NULL&& instance->m_bStreamReady) {
            *(instance->m_file) << outputStream.str();
         }
      }

Attieciigi man vispaar ir Logger klase kaa singletons un ja inicializeets tad m_file ir atveerts ofstream uz teksta failu. Jautaajums ir - kapeec man vinsh log failaa izvada tekstu liidz pirmajam latvieshu burtam(konkrētā gadījumā 'ē') un viss.
PS dotajaa gadiijumaa ar UNICODE man arii skaitlji vairs nestraadaa(?stringaa tiek sabaazti ASCII kodi? par shito lietu droshi varu kljuudiities). Ceru ka saprataat Smile paldies par atsauciibu.
PPS - Izmantoju UNICODE un STL jo taa vajag un man vajag skaidrojumu/risinaajumu tieshi dotajam piemeeram.
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Tue Mar 28, 2006 9:16 pm    Post subject:

1) Es ceru, ka tu tajā unikodes strīmā raksti unikodes stringus? Tb L"glāžšķūņis" nevis "glāžšķūņis"?
2) Kāpēc LogInfo(LPWSTR text) nevis LogInfo(const wstring& text) ?
3) par to formatēšanu - kādus tieši formātus tev vajag?
hexā 8 simbolu uppercase: stream << std::hex << std::setw(8) << std::uppercase << std::fill(0) << x;
floats xx.xxx formātā (aizpilda ar atstarpēm no kreisās puses): stream << std::setprecision(5) << std::setw(6) << std::setfill(' ') << 1.234567;
Var gadīties, ka papildus ir jāiekļauj <iomanip> headeris.
Back to top
View user's profile Send e-mail
gazz



Joined: 03 Jan 2004
Posts: 355
Location: Teika

PostPosted: Tue Mar 28, 2006 9:31 pm    Post subject:

vienkaarshs standalone piemeers:
Code:
#include <string>
#include <sstream>
#include <fstream>

unsigned short bladaac = 15;

using namespace std;

void main() {
   wofstream file("test.txt");

   wostringstream outStream;
   outStream << L"bladāņīc, " << bladaac << ends;
   file << outStream.str();
   file.close();
}

test.txt fails satur tikai un vieniigi "blad"
PS - ja iznjem aaraa tos LV burtus, tad var redzeet arii ka unsigned short netiek normaali izvadiits.
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Tue Mar 28, 2006 9:56 pm    Post subject:

Nja.. nav man nācies ar windows unikodi nekad programmēt, paldies dievam :)
Visu laiku ar cross-platformiskiem libiem esmu ņēmies, kuri utf8 saprot.
Par to stringu nezināšu..
Bet kāpēc to skaitli neraksta, tas varētu būt tāpēc, ka unikodes chars (wchar) ir unsigned short, un tad tas 15 rakstās kā chars moš, nevis skaitlis? (tas ir tikai mans minējums).
Pamēģini static_cast uz int, varbūt līdz. (katrā ziņā GCC normāli ierakstīja 15 tavā piemērā).

Par STL unikodes stringiem uzgāju šo te: http://www.codeproject.com/vcpp/stl/upgradingstlappstounicode.asp
varbūt līdz.
Back to top
View user's profile Send e-mail
Display posts from previous:   
dev.gamez.lv Forum Index -> Programmēšana All times are GMT + 2 Hours
Goto page Previous  1, 2, 3, 4  Next
Page 3 of 4

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group