Trường hợp sử dụng mạnh nhất cho ADL là dành cho các trường hợp như thế này.
namespace A
{
struct S {};
S operator+(const S&, const S&);
}
namespace B
{
A::S test()
{
A::S a, b;
return a + b;
}
}
Nó cũng hữu ích cho việc lựa chọn đúng swap
hàm trong mã chung vì vậy không nên chỉ áp dụng cho operator
chức năng. Nó đã là một phần khá phức tạp của tiêu chuẩn, làm cho các quy tắc ngăn cản nó hoạt động trong một số trường hợp sẽ thêm độ phức tạp hơn nữa, điều gì sẽ là lợi ích?
Tôi không thể nghĩ ra bất kỳ cách gọn gàng nào để yêu cầu rõ ràng rằng sẽ tiết kiệm hơn một cách đáng kể so với việc gọi một hàm trong một không gian tên khác một cách trực tiếp và trong mọi trường hợp.
Chúng tôi đang nghĩ đến điều gì đó như: return [[ use_adl ]] (a + b);
và return A::operator+(a, b);
?
Nguồn
2011-01-05 09:49:39
Không bao giờ nghĩ về điều đó. Vì vậy, ngay cả tôi cũng muốn biết điều đó. Câu hỏi hay! – Nawaz