tôi có thể viết một hàm templated cách nàymẫu vượt qua theo giá trị hoặc tham chiếu const hoặc ...?
template<class T> void f(T x) {...}
hoặc theo cách này
template<class T> void f(T const& x) {...}
Tôi đoán rằng tùy chọn thứ hai có thể được tối ưu hơn vì nó tránh được một cách rõ ràng một bản sao, nhưng tôi nghi ngờ rằng nó có thể cũng không thành công đối với một số loại cụ thể T
(ví dụ: functors?). Vì vậy, khi nào nên sử dụng tùy chọn đầu tiên và khi nào nên sử dụng tùy chọn thứ hai? Ngoài ra còn có boost::call_traits<T>::param_type
và boost::reference_wrapper
có trong câu trả lời cho số previous question của tôi, nhưng mọi người không sử dụng chúng ở mọi nơi, phải không? Có quy tắc nào cho điều này không? Cảm ơn.
Có nguy cơ tìm kiếm ngu ngốc, tôi phải hỏi: làm thế nào nó có thể thất bại cho một functor? – Beta
@Beta: đó là một phỏng đoán ngẫu nhiên. Nếu ai đó có thể giải thích trong trường hợp nó thực sự có thể thất bại, tôi sẽ được quan tâm. –
Bạn đang cố gắng đạt được điều gì? Nó phụ thuộc vào mã nội bộ trong 'f'. –