Tôi có một lớp C++ templated đó cho thấy nhiều một số phương pháp, ví dụ nhưphương pháp Thêm vào mẫu chuyên môn
template<int X, int Y>
class MyBuffer {
public:
MyBuffer<X,Y> method1();
};
Bây giờ, tôi muốn để lộ phương pháp bổ sung cho lớp này nếu X == Y. Tôi đã làm điều này bằng cách phân loại MyBuffer,
template<int X>
class MyRegularBuffer : public MyBuffer<X,X> {
public:
MyRegularBuffer method2();
};
Bây giờ, vấn đề là tôi muốn có thể làm ví dụ
MyRegularBuffer<2> buf = ...
MyRegularBuffer<2> otherBuf = buf.method1().method2();
Nhưng tôi không chắc chắn cách thực hiện việc này. Tôi đã cố gắng để nghĩ về các nhà xây dựng bản sao, các nhà khai thác chuyển đổi, vv, nhưng kỹ năng C++ của tôi là tiếc là một chút gỉ.
EDIT: Tôi nên thêm rằng việc tạo ra các đối tượng này là tương đối rẻ (và cũng có thể, nó sẽ không xảy ra rất nhiều), có nghĩa là nó sẽ là OK để làm một cái gì đó như thế này:
MyRegularBuffer<2> buf = ...
MyRegularBuffer<2> temp = buf.method1(); // Implicit conversion
MyRegularBuffer<2> otherBuf = temp.method2();
Các câu hỏi là, làm cách nào tôi có thể xác định chuyển đổi như vậy. Các nhà điều hành chuyển đổi cần phải được trong MyBuffer, tôi nghĩ, nhưng tôi muốn nó có sẵn chỉ khi X == Y.
hoàn toàn không thể hiểu được. Ví dụ, bạn nói về "toán tử chuyển đổi", nhưng không có gì. Đăng một số mã thực. –
@Neil, tôi nghĩ người dùng đã hỏi một câu hỏi chính hãng với khả năng tốt nhất của họ. Và tôi nghĩ tôi hiểu nó một chút. –
@Aaron Trong trường hợp đó, hãy chia sẻ sự hiểu biết của bạn. –