2012-02-16 17 views
12

Các mã sau biên dịch và thực hiện những "điều đúng đắn":Làm thế nào để tăng :: tham chiếu cửa hàng biến thể?

#include <boost/variant.hpp> 
#include <iostream> 

int main() 
{ 
    int a = 10; 
    boost::variant<int&, float&> x = a; 
    a = 20; 
    std::cout << boost::get<int&>(x) << "\n"; 
    return 0; 
} 

Làm thế nào để đẩy mạnh :: cửa hàng biến một tài liệu tham khảo? Theo tiêu chuẩn C++, các tham chiếu được lưu trữ hoàn toàn như thế nào với trình biên dịch. Trên thực tế, làm thế nào để boost::variant thậm chí biết có bao nhiêu byte được đưa lên bởi một tham chiếu? sizeof(T&) == sizeof(T), vì vậy không thể sử dụng toán tử sizeof(). Bây giờ, tôi biết tài liệu tham khảo hầu hết có thể được thực hiện như con trỏ, nhưng không có đảm bảo bằng ngôn ngữ. Giải thích tốt về cách get<> và lượt truy cập hoạt động khi biến thể lưu trữ tham chiếu nhận thêm điểm :)

+10

Bằng cách gói chúng trong một đối tượng. '<< sizeof (std :: vector &), sizeof (std :: vector ), sizeof (T); struct T {std :: vector & r;}; '56, 56, 8 –

Trả lời

6

Bạn có thể khai báo trường struct dưới dạng tham chiếu.

struct ref_to_int { 
    ref_to_int(int& init) 
     : _storage(init) {} // _storage stores the reference. 
private: 
    int& _storage; 
}; 

Bạn có thể lấy sizeof(ref_to_int), là 8 trên x64 của tôi với gcc. Trường lưu trữ tham chiếu.

Các vấn đề liên quan