Tôi có một lớp Filter
có phương thức process
bị quá tải cho các đầu vào khác nhau.Bí danh cho tất cả các phương thức quá tải?
template< typename T >
class Filter
{
public:
void process(T arr[], size_t len);
T process(T one_value);
void process(std::array &arr);
void process(std::vector &v);
//... many other variants
using operator() = process; // How to write proper?
}
Tôi muốn đơn giản hóa mã người dùng bỏ qua process
: filter.process(values)
sẽ trở thành filter(values)
. Tôi không nghĩ rằng viết một quá tải operator()
cho mỗi biến thể là ý tưởng tốt. Phải tồn tại một giải pháp thuận tiện hơn?
Nếu bạn muốn hoàn toàn bỏ qua loại kiểm tra bởi trình biên dịch và có khả năng giới thiệu rất nhiều lỗi vi tế, sau đó chắc chắn, đi trước. –
Không bỏ qua bất kỳ kiểm tra loại nào, cũng không có chuyển đổi nào. 'process' sẽ nhận các đối số như được cung cấp cho toán tử'() '. – Niall
@DanKorn Tôi nghĩ rằng nó khá phổ biến để trả lời thẻ 'C++' với mã C++ tuân thủ tiêu chuẩn hiện tại. Đó là, tôi không nghĩ rằng thẻ 'C++' ngụ ý C++ 03 hoặc bất kỳ tiêu chuẩn cụ thể nào khác. –