Tôi muốn khái quát hóa các toán tử bitwise trong C++ mà không nghĩ rằng cấu trúc bên dưới là một mảng.Lập trình meta để tối ưu hóa thuật toán lưu trữ/thời gian chạy, C++
Như dụ ... nếu tôi muốn đại diện cho 86 bit tôi sẽ sử dụng một cấu trúc cấu trúc/lớp như:
typedef struct {
uint64_t x[1];
uint16_t y[1];
uint8_t z[1];
} sampleStruct;
Thay vào đó nếu tôi muốn phân bổ 160 bit Tôi sẽ sử dụng một cấu trúc như:
typedef struct {
uint64_t x[2];
uint32_t y[1];
} sampleStruct;
Tôi đoán một giải pháp nhỏ, nhưng không tối ưu cho việc lưu trữ sẽ là giả định tất cả các khối đều thống nhất và phân bổ tối thiểu nó bao gồm kích thước tôi đang thực hiện, tuy nhiên ngay cả đối với một vấn đề tập thể dục tôi thích cách tôi tiếp xúc.
Đối với tôi nó có vẻ rõ ràng rằng tôi nên sử dụng lập trình meta để giải quyết vấn đề, vì vậy tôi phải xác định đúng
template <int I>
typedef sampleStruct {
//something
}
Tuy nhiên tôi không phải là một chuyên gia lớn trên C++ mẫu Lập trình meta vì vậy tôi muốn hiểu điều gì sẽ là cách tốt nhất để thực hiện các loại khác nhau của mẫu struct varing I. tôi biết làm thế nào để quyết định "cover" tốt nhất cho chiều dài của tôi nó sẽ là một cái gì đó như:
N64 = I/64;
RemN = I%64;
if(0 < RemN <= 8) {
add uint8_t var;
} else if (8 < RemN <= 16) {
add uint16_t var;
} else if (16 < RemN <= 24) {
add uint16_t var;
add uint8_t var;
} else {
//Similarly handle the other cases from 24 < RemN < 64
}
tôi có thể làm gì để đạt được những gì Tôi muốn làm?
Tôi cũng đoán rằng các khối nổi bật sẽ cho phép đạt được hiệu suất tốt hơn một chút so với các triển khai có thể khác.
Hy vọng nó đủ rõ ràng ... (Giả sử C++ 11 hoặc các phiên bản mới hơn).
Có vẻ như bạn muốn ['std :: bitset'] (http://en.cppreference.com/w/cpp/utility/bitset). – Daniel
Tôi không biết nó tồn tại, nó hoạt động theo cách tôi mô tả? (lưu trữ tôi có nghĩa là). – user8469759
có một cuộc nói chuyện về điều này: https://www.youtube.com/watch?v=ea5DiCg8HOY –