Tôi cố gắng để viết toán tử bool-chuyển đổi cho std :: bitsetquá tải chuyển đổi không thành viên để bool hành
tôi đã cố gắng:
template<size_t size>
operator bool(std::bitset<size> & b)
{
return b.any();
}
nhưng tôi đã nhận
error C2801: 'mynamespace::operator bool' must be a non-static member
từ studio hình ảnh của tôi.
Nhưng khi tôi nhìn lên C2801 explanation nó nói gì về điều hành chuyển đổi (chỉ khoảng =, ->, [],())
Vì vậy, là nó có thể bằng cách nào đó viết "std :: Chuyển đổi bitset đến bool nhà điều hành?"
(Tôi không thể gọi b.any()
trong tôi nếu-tuyên bố, bởi vì cùng mã phải chạy khi std :: bitset được thay thế bằng unsigned hay cái gì
typedef std::bitset<x> Bitset;
//typedef unsigned Bitset;
nên cú pháp lý tưởng sẽ như thế nào:
Bitset b = whatewer;
if(b)
doStuff();
)
Nếu quá tải này là không thể, thực hiện giải pháp đề nghị là gì?
cho đến nay tôi sử dụng nó như:
if(b == Bitset(0))
doStuff();
nhưng tôi không thích nó.
Cảm ơn bạn
Đây là một câu hỏi thú vị. Tôi không biết bất kỳ cách nào trực tiếp để làm những gì bạn đề nghị. Có thể không tồn tại. Như bạn đã biết, sự cố là không phải loại được chuyển đổi cũng như loại được chuyển đổi thành người dùng được xác định. Trình biên dịch không muốn cho phép bạn thêm mới, ngụ ý chuyển đổi giữa các loại mà bạn không tạo. Bạn có thể phải định nghĩa, và gọi một cách rõ ràng, hàm của riêng bạn * make_bool(). * Ít nhất nếu bạn * inline * hàm của bạn, nó sẽ hiệu quả vào thời gian chạy như một chuyển đổi tích hợp; nhưng bạn sẽ không nhận được chuyển đổi ngầm, phải không? – thb