Добавление методов для шаблонной обработки специализации

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

6
задан Krumelur 30 July 2010 в 07:37
поделиться