Tôi đang gặp phải vấn đề sau. Hãy xem xét các lớp sau:Không cho phép lấy con trỏ/tham chiếu đến const đến một đối tượng tạm thời trong C++ (không có C++ 0X)
//Will be similar to bost::reference_wrapper
template<class T>
class Ref {
public:
explicit Ref(T& t) : m_ptr(&t) {}
private:
T* m_ptr;
};
và chức năng này trả về một đôi
double fun() {return 1.0;}
Nếu bây giờ chúng ta có
double x = 1.0;
const double xc = 1.0;
Ref<double> ref1(x); //OK
Ref<const double> refc1(cx); //OK
tốt cho đến nay, tuy nhiên:
//Ref<double> ref2(fun()); //Fails as I want it to
Ref<const double> refc2(fun()); //Works but I would like it not to
Is có cách sửa đổi Ref (cách bạn thích) nhưng không phải là chức năng thú vị, để dòng cuối cùng trả về một lỗi biên dịch thời gian? Xin lưu ý rằng bạn có thể sửa đổi chữ ký hàm tạo (miễn là tôi có thể khởi tạo Ref như dự định).
Đây là (đối với tôi) gần nhất với vấn đề đã nêu (với những cân nhắc thú vị, đặc biệt là mới nhất), cảm ơn sự giúp đỡ của bạn! – stepelu