2015-05-14 9 views
6

Ho un codice di simulazione in cui voglio eseguire alcune configurazioni in fase di compilazione: ad esempio, ho bisogno di definire la dimensione, il tipo di dati e una classe contenente le operazioni di basso livello (tempo di compilazione per inlining).Come memorizzare i parametri del modello in qualcosa di simile a una struct?

Qualcosa di simile:

template <int DIMENSION, class DATATYPE, class OPERATIONS> 
class Simulation{ ... } 

template <int DIMENSION, class DATATYPE, class OPERATIONS> 
class SimulationNode{ ... } 

template <int DIMENSION, class DATATYPE, class OPERATIONS> 
class SimulationDataBuffer{ ... } 

primo luogo, è estremamente fastidioso di scrivere l'intero set di parametri per ogni classe. In secondo luogo, anche peggio, potrebbe essere necessario introdurre un parametro aggiuntivo e dovrei modificare tutte le classi.

C'è qualcosa come una struttura per i parametri del modello?

Qualcosa di simile

struct { 
    DIMENSION = 3; 
    DATATYPE = int; 
    OPERATIONS = SimpleOps; 
} CONFIG; 

template <class CONFIG> 
class Simulation{ ... } 

template <class CONFIG> 
class SimulationNode{ ... } 

template <class CONFIG> 
class SimulationDataBuffer{ ... } 

risposta

9

Certo, fare un modello di classe che fornisce alias per i tipi e un membro static per il vostro int.

template <int DIMENSION, class DATATYPE, class OPERATIONS> 
struct Config 
{ 
    static constexpr int dimension = DIMENSION; 
    using datatype = DATATYPE; 
    using operations = OPERATIONS; 
}; 

Quindi è possibile utilizzare in questo modo:

template <class CONFIG> 
class Simulation{ 
    void foo() { int a = CONFIG::dimension; } 
    typename CONFIG::operations my_operations; 
} 

using my_config = Config<3, int, SimpleOps>; 
Simulation<my_config> my_simulation; 
Problemi correlati