ich eine Templat C++ Klasse, die eine Reihe von Methoden aussetzt, zBHinzufügen von Methoden zur Vorlage Spezialisierung
template<int X, int Y>
class MyBuffer {
public:
MyBuffer<X,Y> method1();
};
Nun, ich zusätzliche Methoden dieser Klasse verfügbar machen möchten, wenn X == Y. ich dies getan habe durch Unterklassen MyBuffer,
template<int X>
class MyRegularBuffer : public MyBuffer<X,X> {
public:
MyRegularBuffer method2();
};
Nun ist das Problem, dass ich in der Lage sein möchte, z
MyRegularBuffer<2> buf = ...
MyRegularBuffer<2> otherBuf = buf.method1().method2();
Aber ich bin mir nicht sicher, wie dies zu erreichen ist. Ich habe versucht, an Kopierkonstruktoren, Konvertierungsoperatoren usw. zu denken, aber meine C++ - Kenntnisse sind leider ein wenig eingerostet.
EDIT: Ich möchte, dass die Schöpfung dieser Objekte hinzufügen relativ billig ist (und auch, es wird nicht viel passieren), was bedeutet, es wäre in Ordnung, so etwas zu tun:
MyRegularBuffer<2> buf = ...
MyRegularBuffer<2> temp = buf.method1(); // Implicit conversion
MyRegularBuffer<2> otherBuf = temp.method2();
Die Frage ist dann, wie kann ich die Konvertierung so definieren. Der Konvertierungsoperator muss in MyBuffer sein, denke ich, aber ich möchte, dass er nur verfügbar ist, wenn X == Y ist.
völlig unverständlich. Zum Beispiel sprechen Sie über "den Konvertierungsoperator", aber es gibt keinen. Veröffentlichen Sie einen echten Code. –
@Neil, ich denke, der Benutzer hat eine echte Frage nach besten Kräften gestellt. Und ich denke ich verstehe es etwas. –
@Aaron In diesem Fall, bitte teilen Sie Ihr Verständnis. –