xem xét mã này:Tôi có thể tránh viết một cách rõ ràng một hàm tạo cho mỗi cấu trúc trong một biến thể :: std không?
#include <variant>
struct x {
int y;
};
int main() {
std::variant<x> v(std::in_place_type<x>, {3}); /*1*/
return std::get<x>(v).y;
}
này không biên dịch và cũng như thế khi tháo {}
từ dòng /*1*/
, mặc dù tổng khởi
x a{3};
x b({3});
công trình trong cả hai hình thức "nhà xây dựng giống như". Bằng cách nào đó tôi có thể làm cho bộ khởi tạo std::variant
nhận biết khả năng xây dựng các cấu trúc bằng cách khởi tạo tổng hợp mà không cần phải viết các nhà xây dựng boilerplate nhàm chán cho mỗi cấu trúc có thể được sử dụng trong trường hợp thế giới thực của tôi không?
tôi sẽ mong đợi điều này để làm việc, bằng cách nào đó, theo cppreference hai định nghĩa chồng (5) và (6) trong câu hỏi đều nói
Constructs một biến thể với phương án quy định T và khởi giá trị chứa với các đối số [...]
Tôi đang sử dụng GCC 7 nếu vấn đề đó quan trọng.
Nếu nó điều khiển bạn, 'std :: make_unique' và gia đình có cùng giới hạn: ( – Rakete1111
khởi tạo tổng hợp luôn là dấu hiệu trong hệ thống khởi tạo C++ –