У меня есть шаблонный класс C ++, который предоставляет ряд методов, например,
template<int X, int Y>
class MyBuffer {
public:
MyBuffer<X,Y> method1();
};
Теперь я хочу предоставить дополнительные методы этому классу, если X == Y. Я сделал это, создав подкласс MyBuffer,
template<int X>
class MyRegularBuffer : public MyBuffer<X,X> {
public:
MyRegularBuffer method2();
};
Теперь проблема в том, что я хочу быть в состоянии сделать, например,
MyRegularBuffer<2> buf = ...
MyRegularBuffer<2> otherBuf = buf.method1().method2();
Но я не уверен, как этого добиться. Я пытался думать о конструкторах копирования, операторах преобразования и т. Д., Но мои навыки в C ++, к сожалению, немного устарели.
РЕДАКТИРОВАТЬ: я должен добавить, что создание этих объектов является относительно дешевым (а также, это не произойдет много), что означает, что было бы нормально сделать что-то вроде этого:
MyRegularBuffer<2> buf = ...
MyRegularBuffer<2> temp = buf.method1(); // Implicit conversion
MyRegularBuffer<2> otherBuf = temp.method2();
Тогда возникает вопрос, как я могу определить преобразование таким образом? Я думаю, что оператор преобразования должен быть в MyBuffer, но я хочу, чтобы он был доступен, только если X == Y.