Niklas G. schrieb:
> Ist die type_id nur zur Laufzeit bekannt oder schon beim
> Kompilieren?
Die type_id mit der contains aufgerufen wird ist nur zur Laufzeit
vorhanden
die Contains-Type-Liste(und deren type_ids) aber schon zur Kompilierzeit
und die hängt immer an einem konkreten Objekt - contains ist in diesem
Fall auch eher ein Implements-Interface-Id<TypeA, TypeB>...
> Wenn zur Laufzeit: Die Werte Types::Id()... in ein Array packen und
> darin mit std::find suchen. Falls du sicher weißt dass die Werte
> sortiert sind, ist std::binary_search schneller.
das finde ist nicht mein Problem sondern nur die Parameter-Liste zur
kompilierzeit in die korrekte if-Konstruktion zu verwandeln
contains<TypeA, TypeB>(const int type_id) wird instanziert zu
{
return TypeId<TypeA>::Id() == type_id || TypeId<TypeB>::Id() ==
type_id;
}
contains<TypeB>(const int type_id) wird instanziert zu
{
return TypeId<TypeB>::Id() == type_id;
}
also "ausgerollt"