У меня есть шаблонный класс 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.