Ho una classe su modelli C++ che espone una serie di metodi, ad esempiometodi Aggiunta di modello di specializzazione
template<int X, int Y>
class MyBuffer {
public:
MyBuffer<X,Y> method1();
};
Ora, voglio esporre i metodi aggiuntivi per questa classe se X == Y. ho fatto questo sottoclassi MyBuffer,
template<int X>
class MyRegularBuffer : public MyBuffer<X,X> {
public:
MyRegularBuffer method2();
};
Ora, il problema è che voglio essere in grado di fare ad es.
MyRegularBuffer<2> buf = ...
MyRegularBuffer<2> otherBuf = buf.method1().method2();
Ma non sono sicuro di come farlo. Ho provato a pensare a costruttori di copie, operatori di conversione, ecc., Ma le mie competenze in C++ sono sfortunatamente un po 'arrugginite.
EDIT: Vorrei aggiungere che la creazione di questi oggetti è relativamente a buon mercato (e anche, non accadrà molto), il che significa che sarebbe stato OK per fare qualcosa di simile:
MyRegularBuffer<2> buf = ...
MyRegularBuffer<2> temp = buf.method1(); // Implicit conversion
MyRegularBuffer<2> otherBuf = temp.method2();
Il la domanda è quindi, come posso definire la conversione in questo modo. L'operatore di conversione deve essere in MyBuffer, penso, ma voglio che sia disponibile solo se X == Y.
del tutto incomprensibile. Ad esempio, parli di "l'operatore di conversione", ma non ce n'è. Pubblica un po 'di codice reale. –
@Neil, penso che l'utente abbia posto una vera domanda al meglio delle proprie capacità. E penso di capirlo un po '. –
@Aaron In tal caso, condividi la tua comprensione. –