Mam matrycy klasy C++, który udostępnia szereg metod, npdodawania metod do szablonu specjalizacji
template<int X, int Y>
class MyBuffer {
public:
MyBuffer<X,Y> method1();
};
Teraz chcę narażać dodatkowe metody do tej klasy, jeśli X == Y. I zostało to zrobione przez podklasy MyBuffer,
template<int X>
class MyRegularBuffer : public MyBuffer<X,X> {
public:
MyRegularBuffer method2();
};
Problem polega na tym, że chcę móc np.
MyRegularBuffer<2> buf = ...
MyRegularBuffer<2> otherBuf = buf.method1().method2();
Ale nie jestem pewien, jak to osiągnąć. Próbowałem myśleć o konstruktorach kopiowania, operatorach konwersji itp., Ale moje umiejętności w C++ są niestety trochę zardzewiałe.
EDIT: Dodam, że tworzenie tych obiektów jest stosunkowo tanie (a także, że nie nastąpi dużo), co oznacza, że będzie OK, aby zrobić coś takiego:
MyRegularBuffer<2> buf = ...
MyRegularBuffer<2> temp = buf.method1(); // Implicit conversion
MyRegularBuffer<2> otherBuf = temp.method2();
The pytanie brzmi, jak mogę zdefiniować taką konwersję. Operator konwersji musi znajdować się w MyBuffer, ale chcę, aby był dostępny tylko, jeśli X == Y.
zupełnie niezrozumiałe. Na przykład mówisz o "operatorze konwersji", ale go nie ma. Opublikuj jakiś prawdziwy kod. –
@Neil, myślę, że użytkownik zadał prawdziwe pytanie najlepiej jak potrafił. I myślę, że rozumiem to nieco. –
@Aaron W takim przypadku prosimy o podzielenie się z nami swoją wiedzą. –