Giả sử tôi có một lớp mẫuForwarding hành vi tham khảo với các loại định
template <typename T> class foo;
template <typename... Args>
struct foo<std::tuple<Args...>> {
std::tuple<Args...> t;
foo(Args&&... args): t{std::forward<Args>(args)...} { }
};
Tôi hiểu rằng trong trường hợp này Args&&...
là tài liệu tham khảo rvalue, và tôi có thể có cũng giống như cũng bằng văn bản std::move
thay vì std::forward
.
Tôi cũng có thể có một constructor với sự tham khảo giá trị trái, như vậy
foo(const Args&... args): t{args...} { }
Câu hỏi đặt ra là liệu nó có thể để có được những hành vi tương tự như với sự tham khảo chuyển tiếp, nhưng với nhiều loại nhất định? Lý do tôi muốn điều này là để tôi có thể sử dụng cú pháp như
foo bar({. . .}, {. . .}, . . ., {. . .});
này hoạt động nếu tôi xác định các nhà xây dựng foo(Args&&... args)
, nhưng không cho phép cho một kịch bản hỗn hợp, nơi tôi muốn khởi tạo một số trong những yếu tố thành viên tuple với brace-kèm theo initializer danh sách và có những người khác sao chép từ các trường hợp đối tượng từ trước.
Đây không phải là "tham chiếu chuyển tiếp" nếu đó không phải là tham chiếu chuyển tiếp. (Tham chiếu chuyển tiếp yêu cầu đối số mẫu được suy luận.) –