2012-06-25 28 views
6

những gì tôi muốn lưu trữ là một cách đơn giản để làm cho một số biến liên tục. Đối với điều này tôi đã viết một lớp PeristenceProvider mà kết thúc tốt đẹp tăng chức năng cây tài sản để lưu trữ dữ liệu trong các tập tin xml/ini.c + + dữ liệu tồn tại

Tại thời điểm tôi cần phải làm những việc như thế này:

ClassA::ClassA() 
{ 
    m_valueI = PersistenceProvider::getInstance.get<int>("valueI"); 
} 

ClassA::~ClassA() 
{ 
    PeristenceProvider::getInstance.set<int>("valueI", m_valueI); 
} 

Nhưng lại có một cơ hội để ẩn này trong một cách như thế này:

class ClassA 
{ 
    Persist<int, "valueI"> m_ValueI; 
} 
+0

Tôi nghĩ rằng bạn có thể nhận được gần với mẫu, nhưng đối với bạn sẽ cần vĩ mô ma thuật để làm cho nó chính xác như thế. – Stormenet

+1

Nếu bạn cần tạo chuỗi định danh từ các tên biến, bạn sẽ cần macro –

+0

Bạn có thể chuyển chuỗi ký tự dưới dạng tham số mẫu không? – tmpearce

Trả lời

0

Có vẻ như bạn không phải là sự bền bỉ tấn thông tin - chỉ là một vài thông số lựa chọn. Nếu vậy, sau đó chỉ cần bọc các cuộc gọi hàm trong các hàm của riêng bạn mà lấy hai đối số - một chuỗi std :: const hoặc const char * và loại của mục đang được duy trì. Nếu số lượng loại được duy trì bị giới hạn (ví dụ: int, double, std :: string), điều này sẽ hoạt động tốt.

1

Có thể nhưng không chính xác theo cách đó. Bạn không thể sử dụng chuỗi ký tự để tạo mẫu. Đối tượng chuỗi có liên kết bên ngoài chỉ được phép là đối số không phải kiểu. Vì vậy, hằng số chuỗi phải được xác định là extern và là char[], không chỉ char*.

Xem ví dụ (nó sẽ in "Hello" và "thế giới", thực sự mát mẻ, không phải là nó?):

extern const char hello[] = "Hello"; 
extern const char world[] = "World"; 

template<const char* s> struct X 
{ 
    X() 
    { 
     std::cout << s << std::endl; 
    } 
}; 

X<hello> z1; 
X<world> z2; 
Các vấn đề liên quan