cuốn sách gpt4 ai đã làm

Làm cách nào để phát hiện các loại có thể di chuyển theo bit bằng cách sử dụng các đặc điểm loại trong Visual C++ 9?

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 07:34:02 25 4
mua khóa gpt4 Nike

Tôi có một cái tương tự std::vector class, được biên dịch bằng Visual C++ 2008. Lớp này có một khối các phần tử được lưu trữ di chuyển - phần thân được phân bổ lại hoặc việc chèn/xóa một phần được thực hiện. Một số loại bây giờ có thể ghi nhớ()d trong khi các loại khác yêu cầu xây dựng bản sao ở vị trí mới và sau đó phá hủy ở vị trí ban đầu.

Hiện tại có một hàm tạo khuôn mẫu thực hiện "sao chép cấu trúc, sau đó hủy" và có một chuyên môn hóa cho từng loại, có thể là ghi nhớ()d. Tôi muốn sử dụng V Iual C++ 2008 hỗ trợ các đặc điểm kiểuđể đơn giản hóa nhiệm vụ này.

Điều tôi muốn là tự động chọn cho từng POD ghi nhớ(). Tôi sẽ không phiền khi sử dụng chức năng mẫu đó để di chuyển thứ gì đó có thể ghi nhớ() loại, nhưng tôi không thể chấp nhận điều ngược lại - khi một loại dữ liệu không thể được ghi nhớ()d là ghi nhớ()d.

看起来 __is_pod() nội tại sẽ làm được, nhưng MSDN cho biết nó trả về các loại tích hợp SAI. Vì vậy, tôi đoán tôi cũng cần sử dụng __is_class() Đầu tiên chúng ta hãy lọc ra những thứ không thuộc lớp.

Vì vậy, tôi mặc dù những điều sau đây sẽ làm:

if( !__is_class(T) ) { // không phải cấu trúc và không phải lớp - kiểu tích hợp
// ghi nhớ()
} else if( __is_pod(T) ) { // là một cấu trúc hoặc một lớp và là một POD
// ghi nhớ()
} else { // là struct hoặc class và không phải là POD
//Mặc địnhMoveViaCopy()
}

Giải pháp của tôi có hiệu quả không?

câu trả lời hay nhất

Sử dụng Enable_if của boost:

mẫu 
cấu trúc SmartCopy
{
áp dụng khoảng trống tĩnh(const T& obj, T* Dest)
{
// Bản sao chung...
}
}

mẫu
struct SmartCopy::type >
{
áp dụng khoảng trống tĩnh(const T& obj, T* Dest)
{
// phiên bản ghi nhớ...
}
}

mẫu
void smart_move(const T& obj, T* đích)
{
SmartCopy::apply(obj, dest);
}

Làm cách nào để phát hiện các loại có thể di chuyển theo bit bằng cách sử dụng các đặc điểm loại trong Visual C++ 9? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/8069178/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress