Questo è fondamentalmente ciò che voglio:Come creare un tipo di classe statica in fase di compilazione che inizializza un contenitore membro con valori specifici?
struct Item{
int id;
std::string s;
};
template <???>
struct StaticContainer
{
static const std::deque<Item> _items;
};
template <???>
const std::deque<Item> StaticContainer<>::_items {???};
non deve essere un deque
, voglio solo associare un elenco di valori iterabile con un type
. In modo che io possa fare cose come
typedef StaticContainer<{{1, "a", {2, "b"}, {3, "c"}}> T1;
typedef StaticContainer<{{0, "e"}, {-1, "f"}, {-2, "g"}}> T2;
int main() {
T1 t1;
T2 t2;
t1 = t2; // Error: incompatible types
return 0;
}
Di solito si sta facendo le cose dinamica che è il problema, ma a quanto pare è altrettanto difficile per fare alcune cose per essere dinamici di compilazione. Non voglio usare ereditarietà, polimorfismo e runtime simile, approcci che inducono al sovraccarico.
solo utilizzare parametri di modello non di tipo: http://coliru.stacked-crooked.com/a/47747401cd58d84c –
@ m.s .: ma come inizializzare '_items', quindi? Ho bisogno di mettere i valori di lista di questo tipo creati lì. –
Se si desidera un elenco di valori in fase di compilazione, perché è necessario memorizzarli in un * contenitore *? –