Autore Topic: dead  (Letto 2287 volte)

Offline legacy

  • ASM Lover
  • *****
  • Post: 353
  • Karma: +14/-2
    • Mostra profilo
dead
« il: 13 Gennaio 2015, 19:06:58 »
dead
« Ultima modifica: 17 Gennaio 2020, 23:46:29 da legacy »

Offline cdimauro

  • Human Debugger
  • *****
  • Post: 4291
  • Karma: +7/-95
    • Mostra profilo
Re:fixedpoint bovin, quando il bello del C++ sono gli overlay :D
« Risposta #1 il: 13 Gennaio 2015, 19:18:00 »
e' tutto per include, non me ne vogliate  ;D
Beh, C e C++ hanno solo quelli... :-\

Offline cdimauro

  • Human Debugger
  • *****
  • Post: 4291
  • Karma: +7/-95
    • Mostra profilo
Re:fixedpoint bovin, quando il bello del C++ sono gli overlay :D
« Risposta #2 il: 13 Gennaio 2015, 19:33:16 »
GLOM. :-X Poi io i Makefile li amo particolarmente... :'(

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re:fixedpoint bovin, quando il bello del C++ sono gli overlay :D
« Risposta #3 il: 13 Gennaio 2015, 23:54:40 »
Nel tuo caso, di buona norma, dovresti scrivere le implementazioni di tutti gli operatori nel file .h principale. Magari sotto la definizione di classe, così:
Codice: [Seleziona]
class Banana
{

  void someFunc();
};

inline void Banana::someFunc()
{
  doBanana();
}
In questo modo il compiler può fare l'inline automatico. Se invece li metti nel .cpp ci sono alcuni compilatori furbi che ci riescono e altri che falliscono miseramente e si riducono a fare function call, che è uno spreco per codice di una sola riga. Nota che la keyword "inline" l'ho scritta ma è del tutto inutile (cioè è utile solo ad altri programmatori, non al compiler), il compiler probabilmente nemmeno se la caga, perchè va tutto in automatico in base al livello di ottimizzazione scelto e i calcoli che si fa internamente.

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re:fixedpoint bovin, quando il bello del C++ sono gli overlay :D
« Risposta #4 il: 14 Gennaio 2015, 01:10:27 »
Nota che la keyword "inline" l'ho scritta ma è del tutto inutile

Actually, anche se non è pertinente al discorso, la keyword "inline" è obbligatoria nel caso di funzioni o metodi che non sono template: questo perchè altrimenti la funzione o metodo verrebbe compilata tante volte quanti sono i file che la includono, e il linker si lamenterebbe di troppe funzioni con il nome uguale.

Se la funzione/metodo è un template l'errore non c'è perchè i template sono sempre considerati locali alla translation unit dove la specializzazione è generata.

@legacy:
Ho visto un po' il codice (a tratti), e ci sono alcune cose che ti consiglio di rivedere (oltre a quello che ti ha detto TheKaneB):
- dovresti dichiarare tutti gli operatori const, così li puoi sia usare su oggetti const, sia non rischi per sbaglio di scrivere codice negli operatori che modifica gli oggetti stessi.
- I parametri agli operatori potresti dichiararli tutti come "const fixed &", in modo che gli oggetti vengano passati come riferimento; ti eviti la copia degli oggetti ogni volta che chiami un operatore ma devi ora stare attento a usare la funzione equalize_precision, come fai ad esempio in operator+. Per quest'ultimo caso, potresti riscrivere equalize_precision come:
Codice: [Seleziona]
fixed fixed::equalize_precision(const fixed &x) const
{
    // se la precisione è inferiore, cambialo
    if (precision < x.precision)
    {
        fixed_numerator value = value * SCALE.x[x.precision - precision];
        unsigned char precision = x.precision;
        return fixed(value, precision);
    }

    // altrimenti ritorna lui stesso intatto
    return *this;
}

e cambiare operator+ (e tutti gli altri simili) in:
Codice: [Seleziona]
fixed operator + (const fixed_t x, const fixed_t y)
{
    fixed a = x.equalize_precision(y);
    fixed b = y.equalize_precision(x);
    a.value = a.value + b.value;
    return a;
}

o qualcosa del genere insomma. Forse si può schiacciare qualche copia in più, ma almeno è un inizio. :D

- Di solito, nei linguaggi OOP, gli oggetti vengono chiamati con la prima lettera maiuscola (quindi verrebbe Fixed invece di fixed); è una questione di stile quindi puoi fare come vuoi. :D
- non serve che fai "typedef class fixed  fixed_t;" come si farebbe in C perchè (come hai in realtà già visto nel codice), per dichiarare sia struct che class in C++ non è necessario precederle con "struct" (come in C) e "class".
- usare [ ] per settare la precisione è interessante, ma è anche una di quelle cose che sono eccessivamente "zuccherate" e poi ti portano a fare cose strambissime come, chessò, usare "<<" e ">>" per inserire dati in uno stream... :P
- credo che la funzione show() si possa scrivere in molte meno righe... ma dovrei analizzare bene il suo comportamento quindi in caso te lo dico più tardi. :D
- Con quel sistema hai veramente troppi file per qualcosa che potrebbe stare tranquillamente in uno o due... così complichi anche la consultazione, in quanto sia devi aprire tantissimi file per vedere poche righe, sia non puoi usare le funzioni di ricerca degli editor.

Bon queste son le cose che sento "a pelle", però puoi iniziare da qui intanto. :D

PS: e si scrive "overload", non "overlay"! >:(

Offline cdimauro

  • Human Debugger
  • *****
  • Post: 4291
  • Karma: +7/-95
    • Mostra profilo
Re:fixedpoint bovin, quando il bello del C++ sono gli overlay :D
« Risposta #5 il: 14 Gennaio 2015, 06:39:46 »
Vedi perché "amo" il C++? :-\

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re:fixedpoint bovin, quando il bello del C++ sono gli overlay :D
« Risposta #6 il: 14 Gennaio 2015, 12:19:11 »
Nota che la keyword "inline" l'ho scritta ma è del tutto inutile

Actually, anche se non è pertinente al discorso, la keyword "inline" è obbligatoria nel caso di funzioni o metodi che non sono template: questo perchè altrimenti la funzione o metodo verrebbe compilata tante volte quanti sono i file che la includono, e il linker si lamenterebbe di troppe funzioni con il nome uguale.


Hai ragione, non ci avevo riflettuto :)

Offline cdimauro

  • Human Debugger
  • *****
  • Post: 4291
  • Karma: +7/-95
    • Mostra profilo
Re:fixedpoint bovin, quando il bello del C++ sono gli overload :D
« Risposta #7 il: 14 Gennaio 2015, 18:31:55 »
E se non c'hai pensato tu, Antonio, che macini C++ giornalmente, figurati chi lo conosce appena... :-[

Sono sempre più convinto che era, è, e sarà un linguaggio orribile, di cui spero di poter fare a meno.

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re:fixedpoint bovin, quando il bello del C++ sono gli overload :D
« Risposta #8 il: 14 Gennaio 2015, 18:37:56 »
Eh sì, ci lavoro tanto ma non mi piace. Lavorare in C++ ha un livello di difficoltà molto elevato che non si traduce in benefici tangibili a meno che tu non stia scrivendo del sofware particolare che sfrutta librerie C++ in modo massiccio e quindi sei legato a tale piattaforma.
Se potessi scegliere ignorando tutta una serie di fattori, investirei alcuni mesi nello studio approfondito di C# e lavorerei solo su quello, che a mio avviso è uno dei migliori linguaggi tra quelli attualmente in voga.
Purtroppo non ho questa ampia libertà di scelta e mi tocca convivere con tanti ambienti e linguaggi e questa cosa mi porta anche a tralasciare i dettagli più sottili, proprio per sgravare il cervello da troppe elaborazioni :D
In questo periodo scrivo quotidianamente in C++, QML (qt), Java, JavaScript e PHP, per cui aggiungi anche l'eventuale confusione che si crea commutando da un linguaggio all'altro :D
Insomma, inizio a delirare :D

Offline cdimauro

  • Human Debugger
  • *****
  • Post: 4291
  • Karma: +7/-95
    • Mostra profilo
Re:fixedpoint bovin, quando il bello del C++ sono gli overload :D
« Risposta #9 il: 14 Gennaio 2015, 18:48:46 »
Con la prossima versione di Visual Studio Microsoft ha deciso di supportare Android. Non ricordo se farà lo stesso con iOS. Se è così, credo che un'occhiata a C# sarà d'obbligo, per la tua gioia e sanità mentale. :P

Tags: