Sto cercando informazioni su un pattern che ho usato di recente. L'idea di base è che esiste un tipo con una proprietà che può essere sia in fase di compilazione (parametro template) o runtime (membro). std :: span è un buon esempio di questo modello. Ecco un esempio del modello nella sua forma più pura:
// special “invalid” value
constexpr int runtime = -1;
// compile-time version
template <int Property = runtime>
struct Type {
static constexpr int getProp() {
return Property;
}
};
// runtime version
template <>
struct Type<runtime> {
int getProp() const {
return property;
}
private:
int property;
};
Di solito finisci con due classi molto simili quindi di solito sollevo codice comune in una classe base usando l'idioma CRTP.
- Questo modello ha un nome?
- Se non c'è un buon nome, come dovrei descriverlo? (Il titolo della domanda è il mio miglior tentativo)
- Qualcuno ha scritto su questo modello da qualche parte?
- Quando dovrei evitare di usare questo modello?