Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 5 của 5
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Các bạn ui, có ai biết Lập trình tổng quát là gì ko ?(generic programming)

    Mình đang tìm hiểu xem việc lập trình tổng quát là gì, trên mạng ko thấy có mấy bài hướng dẫn về nó, không biết các bạn có hướng dẫn hay phương pháp nào để có thể lập trình tổng quát không, xin cho mình biết với.
    Rất cảm ơn các bạn

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    http://www.lmgtfy.com/?q=generic+programming [IMG]images/smilies/biggrin.png[/IMG]

  4. #4
    http://microsofttech.net/generic
    Toàn tiếng việt nhé

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Đây là một đoạn lấy từ slide của uet http://uet.vnu.edu.vn/tltk/Learning/...troduction.pdf

    Lập trình tổng quát (generic programming)
    - Một tư duy lập trình mở, trên quan ₫iểm tổng quát hóa tất cả những gì có thể nhằm ₫ưa ra một khuôn mẫu giải pháp cho nhiều bài toán lập trình cụ thể.
    Ưu ₫iểm:
    - Giảm tối ₫a lượng mã nguồn
    - Tăng nhiều lần giá trị sử dụng lại của phần mềm
    - Có thể kết hợp tùy ý với các phương pháp luận khác
    - Tính khả chuyển cao
    Các hình thức tổng quát hóa:
    - Kiểu dữ liệu
    - Phép toán cơ bản
    - Cấu trúc dữ liệu
    - Quản lý bộ nhớ,...
    Có rất nhiều phương pháp để lập trình tổng quát, với C++ có thể dùng template.
    Đây là một ví dụ về hàm fast_abs(x) tính giá trị tuyệt đối của x với x là kiểu dữ liệu số nguyên hoặc số dấu phẩy động bất kỳ (còn kiểu long double vẫn chưa nghĩa ra cách). Ưu điểm của nó là không cần sử dụng đến các câu lệnh rẽ nhánh, nhờ đó thực hiện rất nhanh.

    Mã:
    /* * ===================================================================================== * *       Filename:  fast_abs.c * *    Description:   * *        Version:  1.0 *        Created:  03/15/2012 01:40:54 PM *       Revision:  none *       Compiler:  gcc * *         Author:  BOSS14420 (boss14420), boss14420@gmail.com *        Company:   * * ===================================================================================== */ #include <type_traits>#include <cstdint>#include <cstdlib>#include <cstdio> /* number tag */struct unsigned_integral_number_tag {};struct signed_integral_number_tag {};struct float_number_tag {};/*  */ /* integral number traits */template<typename T, bool IsSigned = std::is_signed<T>::value>struct integral_number_traits {    typedef signed_integral_number_tag number_tag;}; template<typename T>struct integral_number_traits<T, false> {    typedef unsigned_integral_number_tag number_tag;};/*  */ /* floating point number traits */template<size_t N> struct float_number_traits; template<> struct float_number_traits<4> {    typedef uint32_t int_type;    static const int_type SIGN_MASK = 0x7FFFFFFF;}; template<> struct float_number_traits<8> {    typedef uint64_t int_type;    static const int_type SIGN_MASK = 0x7FFFFFFFFFFFFFFFULL;};/*  */ /* number_traits */template<typename T, bool IsIntegral = std::is_integral<T>::value,                     bool IsFloat = std::is_floating_point<T>::value>struct number_traits {    typedef void number_tag;}; // for floating point numbertemplate<typename T>struct number_traits<T, false, true> {    typedef float_number_tag number_tag;    typedef typename float_number_traits<sizeof(T)>::int_type int_type;    static const int_type SIGN_MASK = float_number_traits<sizeof(T)>::SIGN_MASK;}; // for integral numbertemplate<typename T>struct number_traits<T, true, false> {    typedef typename integral_number_traits<T>::number_tag number_tag;};/*  */ /* fast_abs_dispatch */template<typename T>T fast_abs_dispatch(T a, signed_integral_number_tag){     T sign = a >> ((sizeof(T) << 3) - 1);    return (a ^ sign) - sign;} template<typename T>T fast_abs_dispatch(T a, unsigned_integral_number_tag){    return a;} template<typename T>T fast_abs_dispatch(T a, float_number_tag) {    typedef typename number_traits<T>::int_type int_type;     int_type& a_int = reinterpret_cast<int_type&>(a);    a_int &= number_traits<T>::SIGN_MASK;    return reinterpret_cast<T&>(a_int);}/* */ template<typename T> T fast_abs(T a) {    typename number_traits<T>::number_tag number_tag;    return fast_abs_dispatch(a, number_tag);}  int main(int argc, char **argv) {    std::printf("|%d| = %d
    ", (short)-6, fast_abs((short)-6));    std::printf("|%u| = %u
    ", (uint8_t)6, fast_abs((uint8_t)6));    std::printf("|%d| = %d
    ", -56, fast_abs(-56));    std::printf("|%u| = %u
    ", 56U, fast_abs(56U));    std::printf("|%lld| = %lld
    ", -5657849365982634728LL, fast_abs(-5657849365982634728LL));    std::printf("|%lld| = %lld
    ", 565784982634728LL, fast_abs(565784982634728LL));    std::printf("|%f| = %f
    ", -6.34f, fast_abs(-6.34f));    std::printf("|%f| = %f
    ", 2.15, fast_abs(2.15)); //    struct A {} a;//    fast_abs(a);//        short s;    std::printf("
    short s = ");    std::scanf("%hd", &s);    std::printf("|%hd| = %hd
    ", s, fast_abs(s));//    std::printf("%d
    ", i);     double d;    std::printf("
    double d = ");    std::scanf("%lf", &d);    std::printf("|%f| = %f
    ", d, fast_abs(d));     return 0;}

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •