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

c++ - Chuyên về std::make_shared

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 01:00:27 hai mươi bốn 4
mua khóa gpt4 Nike

Tôi có một loại có yêu cầu căn chỉnh nghiêm ngặt (do sử dụng các hoạt động AVX) lớn hơn căn chỉnh mặc định của nền tảng.

Để đơn giản hóa việc sử dụng lớp này tôi muốn chuyên std::make_shared Luôn sử dụng bộ cấp phát thích hợp cho loại.

Như thế này:

không gian tên std{
mẫu nội tuyến
auto make_shared(Args&&... args){
return std::allocate_shared(allocator_type, std::forward(args)...);
}
}

Câu hỏi của tôi là, tiêu chuẩn có cho phép điều này không? Nó sẽ hoạt động như mong đợi?

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

Từ N4140 [namespace.std]/1 (tôi nhấn mạnh):

Hành vi của chương trình C++ không được xác định nếu nó thêm các khai báo hoặc định nghĩa vào không gian tên std hoặc vào một không gian tên trong không gian tên std trừ khi có quy định khác. Một chương trình có thể thêm chuyên môn mẫu cho bất kỳ mẫu thư viện tiêu chuẩn nào vào không gian tên std chỉ nếu việc khai báo phụ thuộc vào loại do người dùng xác định và chuyên môn đáp ứng các yêu cầu thư viện tiêu chuẩn cho mẫu gốc và không bị cấm rõ ràng.

Vì bạn đang thêm chuyên môn về mẫu dựa trên loại do người dùng xác định, nên đây là tiêu chuẩn Mở rộng không gian tên hiệu quả.

Tuy nhiên, như @dyp đã chỉ ra, bạn không thể chuyên môn hóa một phần các mẫu chức năng. Tùy chọn tốt nhất của bạn là chỉ định rõ ràng X tham số cho hàm tạo (mất chuyển tiếp hoàn hảo) hoặc chỉ viết một make_shared_x chức năng (mất tính nhất quán).

Về c++ - chuyên std::make_shared, 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/31473756/

hai mươi bốn 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