Variable name vom template-argument?

Gibt es eine Möglichkeit, zu generieren, die den Namen einer Variablen innerhalb einer Klasse basierend auf einer template argument?

template<class T, (someconstruct) t>

class Item {
    public:        
        T t;
};

Item<float, "Position"> myItem;

myItem.Position = 0.123f;

So, dass das, was ich haben instanziiert ist eine variable vom Typ T mit der Kennung t (wo t übergeben wird, durch den Programmierer, also Position, so haben wir eine T genannt Position? Oder ist das dehnen der template meta-Programmierung Konzept ein wenig zu weit? :p

  • 1. Vermutlich nicht möglich. 2. Vermutlich ein sehr gebrochenes Idee. 3. Warum, glaubst du, brauchen Sie diese? (4. Der Präprozessor kann dies tun, aber das ist keine akzeptable Antwort)
  • Lass mich raten: weil er in früheren PHP-Programmierer 😉
  • Ja, ich weiß, es ist undurchsichtig! Ich bin Implementierung einer generischen Vorlagen-vertex-Typ, wobei jede Komponente eines vertex hat sowohl einen Typ (z.B. float[3] oder Vector3d - und eine Nutzung, d.h. usage_normal, usage_position, etc. Ich möchte in der Lage zu konstruieren, Scheitelpunkte, indem in template-Argumente und Verwendung von template-Rekursion zu bauen, eine Struktur, die in ähnlicher Weise wie dieses: entropygames.net/...
  • also warum nicht mit enums zu repräsentieren Nutzung?
  • Sorry, ich nicht fertig, mein Kommentar... war getäuscht durch drücken der enter-Taste! Ich bin rekursiv Aufbau einer vertex-Struktur von template-Argumenten. Aber mit dieser Methode, die ich nicht haben kann, sagen wir, zwei von der gleichen enum "Art", weil die Spezialisierung gibt Ihnen die gleichen Bezeichner.
  • Vorlagen können auch spezialisieren, indem Sie Wert - nicht nur geben. Zum Beispiel: template <int N> struct Foo; solange der Wert ist eine Integrale Konstante oder eine enumeration-Typ. Also, wenn Sie hatte eine Verwendung von enum" genannt Usage, man könnte eine Vorlage erstellen, wie template <Usage U> struct Foo;, und dann spezialisieren Sie es, wie Sie sehen, passen für jeden Aufzählungstyp.
  • Mit Verweis auf die URL, die Sie zur Verfügung gestellt, warum können nicht Sie nur haben template <> struct vertex_part<usage_normal_3f> { vector<float, 3> normal; }; neben der Spezialisierung für uasge_position_3f? Bin ich etwas fehlt?
  • Ich hätte Interesse an deiner Meinung auf die Antwort, die ich zur Verfügung gestellt.
  • Hey user, ich werde einen Blick auf Sie später noch im detail auf. Ich löste dieses kleine problem, indem Sie völlig verändert mein Ansatz. Ich habe eine Variante Struktur, die Karten direkt auf eine OpenGL/D3D vertex-buffer und die Speicher ich ein array dieser um eine Ecke. Alle meta-Daten in der Struktur und der name ist die string-Taste (oder index) in das array der meta - Elemente. Dies funktioniert OK, da brauche ich nicht häufiger low-level-Zugriff auf einzelne vertex-Komponenten außerhalb des shaders. Vielleicht ein performance-problem wenn ich jemals zu tun, obwohl.

InformationsquelleAutor Robinson | 2010-12-14
Schreibe einen Kommentar