Dies hat zur Folge, dass innerhalb dieser Methode typename den übergebenen Typ korrekt definiert, z.B. als int, aber innerhalb des B-Konstruktors ist typename bereits gleich string.
Das Ergebnis von typename ist immer vom Typ string, d.h. typename kann konventionell als Funktion dargestellt werden
A100: das Ergebnis von typename ist immer vom Typ string, mit anderen Worten
Das ist nicht das, was ich meine. typename gibt eine Zeichenkette zurück, die den Typnamen enthält. In einer Methode einer Vorlagenklasse ist der String mit dem Typ "int", und im Konstruktor, der von dort aufgerufen wird, enthält der String "string".
Stanislav Korotky: Das ist nicht das, was ich meine. typename gibt eine Zeichenkette mit dem Typnamen zurück. In der Methode der Vorlagenklasse ist der String vom Typ "int", und im Konstruktor, der von dort aus aufgerufen wird, enthält der String "string".
class A { public:
template<typename T>
A( T ) { Print( typename( T )); }
};
class B { public:
template<typename T>
void f( T t ) { A a( t ); } //вызываем A::A(...)
};
voidOnStart()
{
B b;
int i = 0;
b.f( i );
}
Leute, ist das ein Marktfehler oder ist das völlig normal?
Ich habe es nicht ausprobiert, aber es sollte nicht funktionieren, wenn es an die Hardware und nicht an das Betriebssystem gebunden ist. Das ist so, als würde man die Festplatte ausbauen und in ein anderes Motherboard mit einem anderen Video einbauen. Wir werden sofort mit der Suche nach neuen Fahrern beginnen.
Ein Aufruf einer virtuellen Funktion in einer Instanz einer abgeleiteten Klasse führt zu einem Aufruf dieser Funktion von der Basisklasse, nicht von der abgeleiteten Klasse.
Ein Aufruf einer virtuellen Funktion in einer Instanz einer abgeleiteten Klasse führt zu einem Aufruf dieser Funktion von der Basisklasse, nicht von der abgeleiteten Klasse.
Dies ist im Konstruktor immer der Fall. Und warum? -> google C++ (fügen Sie das Wort constructor in den Abfrage-String ein)
A100: Das tun sie immer im Konstruktor. Und warum? -> google C++ (fügen Sie das Wort constructor in den Abfrage-String ein)
Danke, das wusste ich nicht. Es wäre gut, es in die MQL5-Referenz aufzunehmen, Sie wissen schon, wo virtuelle Funktionen und Konstruktoren erwähnt werden. Das ist nicht in allen Sprachen so.
A100:
Sie haben Recht. Kurz und klar, ohne unnötige Worte. Ich habe einen funktionierenden Code veröffentlicht.
Dies hat zur Folge, dass innerhalb dieser Methode typename den übergebenen Typ korrekt definiert, z.B. als int, aber innerhalb des B-Konstruktors ist typename bereits gleich string.
das Ergebnis von typename ist immer vom Typ string, mit anderen Worten
Das ist nicht das, was ich meine. typename gibt eine Zeichenkette mit dem Typnamen zurück. In der Methode der Vorlagenklasse ist der String vom Typ "int", und im Konstruktor, der von dort aus aufgerufen wird, enthält der String "string".
Der Compiler meldet keinen Fehler, wenn #endif fehlt
Vorzugsweise sollte dies der Fall sein, da sonst schwer zu findende FehlerErgebnis: int.
Leute, ist das ein Marktfehler oder ist das völlig normal?
Ich habe es nicht ausprobiert, aber es sollte nicht funktionieren, wenn es an die Hardware und nicht an das Betriebssystem gebunden ist. Das ist so, als würde man die Festplatte ausbauen und in ein anderes Motherboard mit einem anderen Video einbauen. Wir werden sofort mit der Suche nach neuen Fahrern beginnen.
Oder habe ich die virtuelle Maschine falsch verstanden?
Ein Aufruf einer virtuellen Funktion in einer Instanz einer abgeleiteten Klasse führt zu einem Aufruf dieser Funktion von der Basisklasse, nicht von der abgeleiteten Klasse.
Ein Aufruf einer virtuellen Funktion in einer Instanz einer abgeleiteten Klasse führt zu einem Aufruf dieser Funktion von der Basisklasse, nicht von der abgeleiteten Klasse.
Das tun sie immer im Konstruktor. Und warum? -> google C++ (fügen Sie das Wort constructor in den Abfrage-String ein)
Danke, das wusste ich nicht. Es wäre gut, es in die MQL5-Referenz aufzunehmen, Sie wissen schon, wo virtuelle Funktionen und Konstruktoren erwähnt werden. Das ist nicht in allen Sprachen so.