tengo una clase de plantilla de C++ que expone una serie de métodos, por ejemplométodos Agregando especialización de plantilla
template<int X, int Y>
class MyBuffer {
public:
MyBuffer<X,Y> method1();
};
Ahora, Quiero exponer métodos adicionales para esta clase si X == Y. I haber hecho esto subclasificando MyBuffer,
template<int X>
class MyRegularBuffer : public MyBuffer<X,X> {
public:
MyRegularBuffer method2();
};
Ahora, el problema es que quiero ser capaz, por ejemplo
MyRegularBuffer<2> buf = ...
MyRegularBuffer<2> otherBuf = buf.method1().method2();
Pero no estoy seguro de cómo lograr esto. Traté de pensar en los constructores de copia, los operadores de conversión, etc., pero desafortunadamente mis habilidades en C++ están un poco oxidadas.
EDIT: Debo añadir que la creación de estos objetos es relativamente barato (y también, no va a suceder muy a menudo), lo que significa que estaría bien hacer algo como esto:
MyRegularBuffer<2> buf = ...
MyRegularBuffer<2> temp = buf.method1(); // Implicit conversion
MyRegularBuffer<2> otherBuf = temp.method2();
El La pregunta es, entonces, ¿cómo puedo definir la conversión de esa manera? El operador de conversión necesita estar en MyBuffer, creo, pero quiero que esté disponible solo si X == Y.
completamente incomprensible. Por ejemplo, usted habla sobre "el operador de conversión", pero no hay ninguno. Publica un código real. –
@Neil, creo que el usuario ha hecho una pregunta genuina en la medida de sus posibilidades. Y creo que lo entiendo de alguna manera. –
@ Aaron En ese caso, comparta su comprensión. –