У меня есть шаблонный класс 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++, к сожалению, немного ржавые.
EDIT: Я хотел бы добавить, что создание этих объектов является относительно дешевым (а также, что не будет много), что означает, что было бы хорошо, чтобы сделать что-то вроде этого:
MyRegularBuffer<2> buf = ...
MyRegularBuffer<2> temp = buf.method1(); // Implicit conversion
MyRegularBuffer<2> otherBuf = temp.method2();
В вопрос заключается в том, как я могу определить такое преобразование. Я думаю, оператор преобразования должен быть в MyBuffer, но я хочу, чтобы он был доступен, только если X == Y.
Совершенно непонятное. Например, вы говорите о «операторе преобразования», но его нет. Отправьте некоторый реальный код. – 2010-07-29 21:15:06
@Neil, я думаю, пользователь задал неподдельный вопрос в меру своих возможностей. И я думаю, что я это понимаю. –
@Aaron В этом случае, сообщите пожалуйста. – 2010-07-29 22:36:30