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

c++ - Chọn triển khai toán tử theo khuôn mẫu

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

Giả sử chúng ta có mộttoán tử/:

cấu trúc my_class {
giá trị uint64_t;
}

mẫu
toán tử constexpr T/(const my_class& a, const my_class& b)
{
trả về static_cast(a.value) / static_cast(b.value);
}

Cách chọna/b(TRONGMộtbĐúnglớp học của tôitype) trả về chẳng hạn,int hoặc gấp đôi?

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

Bạn có thể sử dụng một số toán tử chuyển đổi và ma thuật mẫu. Bạn có thể bắt đầu bằng cách xác định một trình bao bọc đơn giản cho biểu thức:

cấu trúc DivideMyClass {
DivideMyClass(const MyClass& lhs_, const MyClass& rhs_) : lhs{lhs_}, rhs_{rhs} {}

mẫu
toán tử T () const {
trả về static_cast(lhs.value) / static_cast(rhs.value);
}

private:
const MyClass& lhs;
const MyClass& rhs;
};

Sau đó, toán tử có thể được nạp chồng như thế này:

constexpr Toán tử DivideMyClass/(const my_class& a, const my_class& b)
{
trả về DivideMyClass{a, b};
}

Sau đó, mã của bạn sẽ trông như thế này:

double d = MyClass{21} / MyClass{5} // sẽ bằng 4,2

Tại sao giải pháp này lại tệ

Ngôn ngữ không quá tải việc phân chia theo kiểu trả về. Mã của bạn sẽ khiến người khác nhầm lẫn vì nghĩ rằng có lỗi. Nếu bạn sử dụng rộng rãi phương pháp này, bạn sẽ có được mã gần như không thể đọc được.

Một điều nữa, việc chuyển đổi được thực hiện ngầm, không có gì để nói liệu việc chuyển đổi có thực sự được thực hiện trong toán tử tại trang cuộc gọi hay không.

Bạn sẽ chặn AAA idom (hầu như luôn sử dụng tự động). tự động Có thể phá vỡ mã của bạn, đó là một điều xấu.

Những kỹ thuật như thế này nên được sử dụng cho các biểu thức mẫu và những thứ tương tự. Việc sử dụng nó để chia đơn giản sẽ khiến người khác nhầm lẫn.

Về c++ - chọn cách triển khai toán tử theo khuôn mẫu, 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/39856757/

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