30/09/2018, 18:53

Viết 1 hàm SUM có thể chạy được với nhiều cách truyền tham số

Chào các bạn,

Mình đang có một vấn đề cần các bạn giúp đỡ. Các bạn có thể giúp mình viết 1 hàm SUM để chạy được với tất cả các lời gọi hàm ở main kia không? Mình xin cảm ơn các bạn

明玉 viết 20:59 ngày 30/09/2018

Sử dụng Variable arguments.
Nếu là số lượng tham số bất kỳ thì tham số đầu tiên bắt buộc phải là số lượng các tham số còn lại.
Ví dụ cho bạn:

// n là số lượng muốn 
int MySum(int n, ...)
{
    int total = 0;
    va_list value;
    va_start(value, n);
    for (int i = 0; i < n; i++)
    {
        // lấy tham số tiếp theo, con trỏ value tự động tịnh tiến lên sizeof(int) bước
        total += va_arg(value, int);
    }
    va_end(value);
    return total;
}

Còn để giống y như bạn (không cần số n như trên) thì dùng Variadic template (Nó dùng đệ quy nên mình chả thích dùng)
Ví dụ (Mình lấy từ đây):

// có thể dùng được cho kiểu dữ liệu bất kỳ miễn là kiểu đó có overload của toán tử '+'
template<typename T>
T MySum(T value) 
{
   return value;
}

template<typename T, typename... Args>
T MySum(T firstValue, Args... args)
{
   return firstValue + MySum(args...);
}
Bài liên quan
0