Ich mache eine Fabrik "M". Ich muss eine Klasse "C" konstruieren. Der Entwickler, der meine Klasse 'M' enthält, möchte 'M :: getInst()' aufrufen können und eine korrekt konstruierte Instanz von 'C' haben.Ist es für eine Klasse möglich, ein Parameterpaket verfügbar zu machen?
Zusätzlich möchte ich den Schreiber von 'C' in der Lage sein, mit uns zu arbeiten, indem wir absolut nichts tun, außer einen öffentlichen Konstruktor zur Verfügung zu stellen, und eine einzelne Hilfsmethode, die meiner Klasse 'M' sagt, wie man das findet Konstrukteur.
Ist das möglich? Das Folgende ist das was ich prinzipiell machen möchte. Das Problem ist, dass ich in C++ keine Möglichkeit sehe, die Methode "types()" zu schreiben. Es scheint unmöglich, Typen (sogar einen!) Als Wert zurückzugeben.
struct C {
String s; Blob b;
C(String a, Blob b) : s(a), b(b) {}
typelist types() {
return { String, Blob };
}
};
clas M {
template<typename T>
T* getInst() {
return getInst_imp<T::types()>();
};
template<class... Ks>
T* getInst_imp() {
return T(getValue(Ks)...);
}
};
Welche, vom Anwender aufgerufen werden würde, wie:
C* instance = M::getInst<C>();
Der Grund dafür ist, dass ‚C‘ wird aus Komponenten aus einem festen Satz von Komponententypen gebaut. Meine Klasse 'M' ist die Autorität, wie man sie initialisiert. Es macht also Sinn, jedes Mal, wenn ein Entwickler ein neues Aroma von C kreieren möchte, alle bestehenden Räder neu zu erfinden? Sie sollten M einfach sagen, welche Komponenten sie brauchen. Aber wie geht das?
Das ist perfekt! Ich hatte versucht, etwas Ähnliches zu machen, aber ich habe nie daran gedacht, den Typedef zu verwenden - ich habe versucht, die Klassen selbst zu erstellen. Ich dachte, es wäre eine Sackgasse, weil der "Benutzer" sie spezialisieren musste, bevor sie verwendet werden konnten. Aber der Typdef gibt C-Autor einen Ort, um diese Informationen zu speichern. Vielen Dank! – SaburoutaMishima