Wie kann man eigentlich auf den Wert aus einem Template der Basisklasse in einer abgeleiteten Klasse zugreifen?
In dem Beispiel versuche ich auf a (also 42) in Derrived zuzugreifen.
template<int a>
class Base {
protected:
int arr[a];
// int a_in_base = a; // (4)
public:
Base() {}
};
class Derrived : public Base<42> {
protected:
//int a_in_derrived = a; // error: 'a' was not declared in this scope (1)
//int arr_b[a]; // error: 'a' was not declared in this scope (2)
//int arr_b[Base<a>::a]; // error (3)
public:
Derrived() {}
};
Derrived test;
void setup() {
Serial.begin(115200);
}
void loop() {}
1,2,3 schlagen fehl.
4 würde gehen, aber ich will eigentlich nicht den Wert zusätzlich in der Basisklasse halten.
template<int a>
class Base {
protected:
int arr[a];
// int a_in_base = a; // (4)
public:
Base() {}
};
in der Derrived Klasse verwenden? Das geht nicht, weil a in Base kein Element ist. 'a' wird direkt eingesetzt. Wenn Derrived 'a' aus Base verwenden soll, muss 'a' ein Element von Base sein. Also funktioniert nur Fall (4) wäre die Antwort.
Außer du reichst 'a' als Parameter per Konstruktor von Derrived zu Base durch. Was passen würde, weil du erstellst von Derrived eine Instanz und nicht von Base. Vielleicht möchtest du auch nicht Base vererben sondern in Derrived eine Instanz von Base erstellen und verwenden.