Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: Define đồng thời nhiều hàm?

  1. #1
    Ngày gia nhập
    03 2017
    Bài viết
    17

    Question Define đồng thời nhiều hàm?

    Chắc đăng ở đây thì hợp hơn.
    Giả sử mình có hàm
    template<typename T> T get(){
    char a='a';
    return (T) a;
    }
    Nếu muốn định nghĩa thông thường:
    get_int() {
    return get<int>();
    }
    tương tự với get_char(),.. các kiểu dữ liệu khác
    Nếu dùng #define:
    #define FUNCTION(name) name get_##name() { return get<name>();}
    FUNCTION(char)
    FUNCTION(int)
    FUNCTION(long)
    #undef FUNCTION
    Nhanh nhưng vẫn phải liệt kê tất cả các kiểu dữ liệu, đối với kiểu dữ liệu mới (class mới tạo sau này), phải cập nhật lại file code.
    Vậy liệu có cách nào định nghĩa với tất cả các kiểu dữ liệu?

  2. #2
    Ngày gia nhập
    04 2014
    Bài viết
    2

    C++ có một keyword rất hay, gọi là template meta programming, nếu bạn muốn biết nhiều hơn có thể tìm hiểu. Có thể bạn muốn một hàm như thế này chăng:

    Code:
    template <typename T>
    T sum(T a, T b) {
        return a + b;
    }
    int main() {
        sum(5, 7);
        sum(3.5, 2.5);
        sum(3.5, 4); //compile error
    }
    - - - Nội dung đã được cập nhật ngày 23-04-2017 lúc 10:11 AM - - -

    Có một version xịn hơn nữa là như thế này:

    Code:
    template <typename A>
    auto sum(const A& a) {
        return a;
    };
    
    template <typename A, typename ...Args>
    auto sum(const A& a, Args&& ...args) {
        return sum(a) + sum(std::forward<Args>(args)...);
    }
    
    int main() {
          std::cout << sum(5, 7, 4, 3.5) << std::endl;
          std::cout << sum(std::string("Xin "), 1, std::string("lan "), std::string("thua")) << std::endl;
          return 0;
    }
    Bạn có thể truyền vào số lượng tùy ý tham số, nếu truyền sai kiểu thì không compile được, cái này trong C++ được gọi là template type deduction, hiểu đơn giản là kiểu của template có thể được tự động theo kiểu của các tham số truyền vào.

Tags của đề tài này

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn