biowep
22-10-2014, 22:15
Salve, ho una determinata classe della quale voglio creare delle istanze a tempo di compilazione. Il mio problema è che non so in che modo potrei contare il numero di volte che chiamo il costruttore. La mia classe è la seguente (magari c'è qualcosa casino, ci sto ancora lavorando)
class Symbol {
using string = std::string;
template<typename K, typename V>
using map = std::map<K, V>;
protected:
constexpr static map<string, Symbol> tracker;
constexpr Symbol(string value, int precedence);
public:
const int ID;
const string value;
const int precedence;
virtual ~Symbol();
static Symbol* getInstance(string value) final;
virtual string print(bool latex = false) = 0;
operator int();
};
class Binary final : public Symbol {
using string = std::string;
public:
const bool isAssociative;
constexpr Binary(string value, int precedence);
~Binary();
};
Voglio creare delle istanze costanti di Binary con dei dati costanti (statici). Importante è l'attributo ID nella classe base. Ogni nuova istanza di Binary deve avere quel numero incrementato di 1 rispetto all'istanza creata precedentemente.
Normalmente si potrebbe inserire un attributo statico che viene incrementato, pero mi pare di capire che non sia possibile incrementare un valore tramite un funzione constexpr.
Posso ottenere quello che voglio senza aggiungere degli ulteriori dati al costruttore che dovrei curare manualmente?
Grazie per l'attenzione.
class Symbol {
using string = std::string;
template<typename K, typename V>
using map = std::map<K, V>;
protected:
constexpr static map<string, Symbol> tracker;
constexpr Symbol(string value, int precedence);
public:
const int ID;
const string value;
const int precedence;
virtual ~Symbol();
static Symbol* getInstance(string value) final;
virtual string print(bool latex = false) = 0;
operator int();
};
class Binary final : public Symbol {
using string = std::string;
public:
const bool isAssociative;
constexpr Binary(string value, int precedence);
~Binary();
};
Voglio creare delle istanze costanti di Binary con dei dati costanti (statici). Importante è l'attributo ID nella classe base. Ogni nuova istanza di Binary deve avere quel numero incrementato di 1 rispetto all'istanza creata precedentemente.
Normalmente si potrebbe inserire un attributo statico che viene incrementato, pero mi pare di capire che non sia possibile incrementare un valore tramite un funzione constexpr.
Posso ottenere quello che voglio senza aggiungere degli ulteriori dati al costruttore che dovrei curare manualmente?
Grazie per l'attenzione.