Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Star Wars Zero Company è l'erede di XCOM 2
Star Wars Zero Company è l'erede di XCOM 2
Bit Reactor porta nell’universo di Star Wars una struttura tattica che richiama apertamente XCOM 2, ma la arricchisce con legami tra i personaggi, progressione ruolistica, gestione della base e un sistema di combattimento costruito attorno a tre Punti Azione e alle risorse condivise della squadra
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Abbiamo provato per una settimana intera la Can-Am Origin, la Dual Sport elettrica del gruppo canadese BRP: ecco com'è andata tra città, autostrada e un primo assaggio di sterrato
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Nelle ultime settimane abbiamo provato il mouse Logitech G305, la tastiera G316 X 98 e le cuffie G325. Si tratta del setup entry-level di Logitech che ormai, di "entry-level" ha ben poco. Tastiera e mouse offrono prestazioni di livello competitivo con quasi nessuna rinuncia e un livello di personalizzazione estremamente elevato. Le cuffie, invece, hanno mostrato qualche debolezza, ma propongono un ventaglio di funzionalità completo che consente di abbandonare completamente i cavi
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-10-2014, 18:57   #1
biowep
Member
 
L'Avatar di biowep
 
Iscritto dal: Nov 2010
Messaggi: 211
[C++] Template Metaprogramming

Salve,
ho dei dubbi riguardo la metaprogrammazione.
Prendiamo ad esempio questo codice, che non sono sicuro al 100% sia metaprogrammazione (perché l'ho modificato usando del codice trovato)
Codice PHP:
#include <iostream>
using namespace std;

template<int i>
class 
FACT {
public:
    static 
int EXEC() {
        return 
i * FACT<i - 1>::EXEC();
    }
};

template<>
class 
FACT<0> {
public:
    static 
int EXEC() {
        return 
1;
    }
};

int main(void) {
    
cout << FACT<3>::EXEC();
} 
Io dichiaro una funzione EXEC in una classe template ed una funzione omonima nella stessa famiglia di classi template specializzata con il valore 0.

Volevo sapere come funziona esattamente.
In particolare: so che le istruzioni metaprogrammate vengono eseguite a compile time, ma questo significa che posso usare qualsiasi istruzione? Ad esempio il return, che valore ha se eseguito a compile time, ha lo stesso effetto?
Nell'esempio, quale è l'esatto codice che si ottiene nel main una volta analizzato il metaprogramma?
La dichiarazione template<int i>, non dovrebbe essere una specializzazione di un template esistente? Cioè dichiarare prima un template<typename T> con del codice generico e poi quello con del codice speciale?
Perché non posso testare direttamente nella funzione della classe template il valore di i.
Codice PHP:
if (i>0); 

Ultima modifica di biowep : 20-10-2014 alle 19:03.
biowep è offline   Rispondi citando il messaggio o parte di esso
Old 23-10-2014, 00:25   #2
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
In soldoni il codice in questione viene tradotto così' :

Codice PHP:
class FACT_0 {
public:
    static 
int EXEC() {
        return 
1;
    }
};

class 
FACT_1 {
public:
    static 
int EXEC() {
        return 
1 * FACT_0::EXEC();
    }
};

class 
FACT_2 {
public:
    static 
int EXEC() {
        return 
2 * FACT_1::EXEC();
    }
};

class 
FACT_3 {
public:
    static 
int EXEC() {
        return 
3 * FACT_2::EXEC();
    }
};

int main() {
  
cout << FACT_3::EXEC();
} 
Devi pensare alla meta programmazione come a una macro più' potente e typesafe.

Il codice viene generato in fase di compilazione e poi compilato normalmente, ma questo internamente al compilatore, senza alcun preprocessore in mezzo come per le macro in C.

Una volta che quel codice che ho postato di sopra viene mandato al code-generator probabilmente verra' ottimizzato dagli inliner in :

Codice PHP:
int main() {
  
cout << 6;
} 
Non hai la certezza che pero' questo avvenga purtroppo

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco Logitech G325, G305 e G316 X: il tris per chi no...
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
NIO vende il 30% della divisione scambio...
Sony brevetta un DualSense capace di acc...
Un volto per l'assistenza IA: cosa pu&og...
NVIDIA autorizza un buyback da 150 milia...
Come il T-1000 di Terminator 2: circuiti...
Cloudflare: risolto il bug di memoria ch...
Lunex spegne gli antivirus con un driver...
Pannelli solari efficienti oltre il limi...
Qualcomm conferma la collaborazione con ...
OnePlus 16 arriverà il prossimo m...
Dallo scroll condiviso ai quiz con Gemin...
Gli agenti AI stanno superando i limiti:...
Con SAS Viya, gli agenti IA passano dall...
OpenAI prepara 'o', un assistente sempre...
Fra coupon e sconti al check-out, ecco t...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:41.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v