2015-07-01 16 views
8

Giả sử tôi có hai lớp foobar có liên quan khá tốt, theo đó tôi có nghĩa là chúng chứa các thành viên dữ liệu chung.Sử dụng ngữ nghĩa di chuyển cho toán tử cast

Tôi có toán tử truyền operator bar() const; trong lớp foo.

Tôi cũng có chức năng func có số bar.

Nếu tôi gọi func với tạm thời vô danh foo thì toán tử truyền sẽ được gọi. Nhưng vì tôi không cần số foo, tôi có thể tuyên bố một số loại di chuyển cast để tối ưu hóa rõ ràng mọi bản sao không cần thiết?

+2

Bạn có thể đăng ví dụ của mình bằng mã thực tế không? –

+0

Đây là toán tử ** chuyển đổi **. Không có điều như một nhà điều hành diễn viên. Diễn viên là nội dung bạn viết trong mã của mình để yêu cầu chuyển đổi, nhưng đó không phải là cách duy nhất để nhận chuyển đổi. –

+0

Cho bất kỳ ai đã bỏ phiếu để đóng câu hỏi này vì câu hỏi "tại sao mã này không hoạt động" cần MCVE - đây là câu hỏi * không * a "tại sao mã này không hoạt động". Trong khi một ví dụ mã chắc chắn sẽ không làm tổn thương câu hỏi này, nó là khá dễ hiểu mà không có nó. – Angew

Trả lời

12

Nếu trình biên dịch của bạn hỗ trợ ref-vòng loại trên hàm thành viên (một tính năng C++ 11), bạn có thể:

operator bar() const & 
{ 
    return bar(the_common_data); 
} 

operator bar() && 
{ 
    return bar(std::move(the_common_data)); 
} 

[Live example]

4

Vâng, bạn có thể sử dụng cú pháp r-value this:

operator bar() &&{ /* std::move(...); */ } 
Các vấn đề liên quan