Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

1

27.07.2015, 16:42

C++ | ID eines Typen ohne RTTI?

Hi,
da RTTI in C++ ziemlich "performance intesiv" sein soll,
wollte ich mal wissen ob man einen Datentyp (Klassen ect.) auch ohne RTTI zur Laufzeit identifizieren kann.

Mir reicht nur eine ID vom Typ-Integer. Ist das irgendwie mit Vererbung und statischen Variablen zu erreichen?

LG Julien
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

27.07.2015, 16:45

Ich wüsste nicht was IDs vom Typ Integer überhaupt mit Vererbung oder statischen Variablen zu tun haben ;) Das sind völlig unabhängige Themen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

27.07.2015, 16:50

Wenn du glaubst zur Laufzeit einen Typen identifizieren zu wollen, ganz egal auf welchem Wege, dann machst du rein prinzipiell meistens etwas falsch...was genau willst du denn erreichen?

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

4

27.07.2015, 16:52

Wenn ich dich richtig verstehe müsste sowas für dich funktionieren.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Type {
public:
    Integer* isInteger() {
        return nullptr;
    }
};

class Integer : public Type {
public:
    Integer* isInteger() {
        return this;
    }
};

// ...

if (Integer* i = obj->isInteger()) {
    // ...
}
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

5

27.07.2015, 16:58


Wenn du glaubst zur Laufzeit einen Typen identifizieren zu wollen, ganz egal auf welchem Wege, dann machst du rein prinzipiell meistens etwas falsch...was genau willst du denn erreichen?

Ich habe meine Klasse aus diesem Post ausprobiert.
Es ist ziemlich imperformant zusammen mit RTTI, ich habe es mit 10.000 Nachrichten probiert, wobei das ganze Casting auch nicht gerade schön ist (Danke BlueCobold).

Mir geht es darum, dass jedes Event eine eigene ID hat und hoffe, dass ich mit einer anderen Lösung performanter bin.
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

6

27.07.2015, 16:59

dot hat es bereits richtig beschrieben: wenn man gut designte Software hat, dann braucht man zur Laufzeit keinen Zugriff auf Typinformationen.
Wofür hättest du diese Informationen denn verwenden wollen? Wenn du beschreibst, was du mit diesen vor gehabt hättest, könnten wir dir wahrscheinlich bessere Lösungsansätze beschreiben.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

7

27.07.2015, 17:01

Klar geht das:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// hpp
#pragma once

#include <utility>

typedef unsigned int Family;
extern Family familyIdIndex;

template <typename T>
Family family(){
    static Family family = familyIdIndex++;
    return family;
}

// cpp
#include "family.hpp"

Family familyIdIndex = 1;

// usage
class A{}
class B{}

family<A>(); // = 1
family<B>(); // = 2

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

27.07.2015, 17:08

Er will aus polymorph verwendeten Klassen wieder die ursprüngliche Instanz haben, weil er sie als generische Nachrichten als Parameter an Methoden übergeben will.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

9

27.07.2015, 17:39

Ich verstehe nicht was du mit "Ursprüngliche Instanz" meinst ;)

Die Sache ist folgende:
Ich habe eine Map, die Keys sollen die "Eventtypen" sein, das Pärchen dazu soll dann ein Vektor aus Funktionpointer bzw. "std::function"s sein,
die auf das bestimmte Event hören.

Ich verspreche mir dadurch ein Eventsystem mit relativ geringem Coupling.
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

27.07.2015, 17:52

Was ich mit ursprünglichem Typ meine? Brief erbt von Nachricht. Du bekommst nur Nachricht übergeben und willst wissen, ob es ein Brief war. Genau dafür willst Du doch die IDs verwenden, damit Du die Nachricht in einen Brief casten kannst. Oder nicht?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige