Tôi có một std::variant
mà tôi muốn chuyển đổi sang một số khác std::variant
có một tập hợp siêu loại. Có cách nào để làm điều đó hơn điều đó cho phép tôi chỉ đơn giản gán cái này cho cái kia không?Chuyển đổi std :: variant sang std khác :: biến thể với siêu tập hợp các loại
template <typename ToVariant, typename FromVariant>
ToVariant ConvertVariant(const FromVariant& from) {
ToVariant to = std::visit([](auto&& arg) -> ToVariant {return arg ; }, from);
return to;
}
int main()
{
std::variant<int , double> a;
a = 5;
std::variant <std::string, double, int> b;
b = ConvertVariant<decltype(b),decltype(a)>(a);
return 0;
}
Tôi muốn có thể chỉ cần viết b = a
để thực hiện chuyển đổi thay vì thực hiện quá trình thiết lập đúc phức tạp này. Không gây ô nhiễm không gian tên std
.
Edit: Đơn giản chỉ cần viết b = a
cung cấp cho các lỗi sau:
error C2679: binary '=': no operator found which takes a right-hand operand of type 'std::variant<int,double>' (or there is no acceptable conversion)
note: while trying to match the argument list '(std::variant<std::string,int,double>, std::variant<int,double>)'
Nếu 'U' là vũ trụ của tất cả các loại, và P có U, không phải là P bằng U? Tôi gặp sự cố khi hiểu vấn đề bạn đang cố gắng giải quyết, có thể tôi là ngu ngốc: | – P0W
Thử trực tiếp biên dịch 'b = a' để xem vấn đề. –
Lỗi như sau: lỗi C2679: nhị phân '=': không tìm thấy toán tử nào có toán hạng bên phải của loại 'std :: variant' (hoặc không có chuyển đổi được chấp nhận) lưu ý: khi cố gắng khớp với danh sách đối số '(std :: biến thể , std :: variant )' –
Bomaz