Tại sao in sau ra "A boolean!"
? Tôi nhận ra có một số chuyển đổi kỳ lạ xảy ra, vì nếu tôi xây dựng một cách rõ ràng một std :: string tôi nhận được hành vi chính xác. Nhưng tại sao độ phân giải quá tải chọn visitor::operator()(bool)
trong trường hợp sau?boost :: biến thể khách truy cập chọn quá tải sai
#include <boost/variant.hpp>
#include <string>
typedef boost::variant<bool, std::string> type;
struct visitor : public boost::static_visitor<> {
void operator()(bool b) const {
std::cout << "A boolean!" << std::endl;
}
void operator()(const std::string& str) const {
std::cout << "A string!" << std::endl;
}
};
int main(int argc, char* argv[]) {
type t = "I am a string";
t.apply_visitor(visitor());
return 0;
}
Tôi đang chạy Visual Studio 2012 (CTP hay không cho kết quả tương tự)
FTR thành viên 'apply_visitor' không phải là một phần của giao diện công khai. Bạn phải sử dụng phiên bản tự do: 'apply_visitor (visitor(), t)'. –
Cảm ơn @LucDanton. Bị bỏ lỡ khi tôi đọc tài liệu –