Tôi có một lớp mẫu như thế này:Lỗi khi sử dụng r và giá trị l nhà xây dựng trong một lớp mẫu
template <typename T>
class MyClass
{
public:
MyClass(const T & val); // First
MyClass(T&& val); // Second
};
Về cơ bản tôi muốn MyClass được constructible từ một T
cho dù đó là một rvalue hoặc một giá trị trái. Bây giờ khi tôi có một cái gì đó như
const A& foo = ...;
MyClass<const A&> x(foo);
Tôi nhận được lỗi định nghĩa lại cho MyClass(const A & val)
.
Tôi giả định điều này là do T & & là tham chiếu chung và do quy tắc thu gọn tham chiếu, hàm tạo thứ hai cũng được chuyển đổi thành chữ ký giống như chữ đầu tiên.
Thứ nhất là sự hiểu biết của tôi về kịch bản lỗi chính xác? thứ hai làm thế nào tôi có thể nhận được xung quanh vấn đề này (Tôi muốn có thể sử dụng tối ưu hóa di chuyển ngữ nghĩa cung cấp khi xây dựng MyClass)?
ok, bây giờ làm cách nào để khắc phục sự cố? mà không hy sinh trên hàm tạo có giá trị r? – Arun
@Arun Đã viết một cách tiếp cận. Khác sẽ là chỉ ... không cho phép 'MyClass' lấy các kiểu tham chiếu với một khẳng định tĩnh và thực thi ở một nơi khác. – Barry
'Một const & const &' là 'Một const &'. Ditto cho 'A const & &&'. –