1. C++ / Говнокод #14382

    +15

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    #include <vector>
    #include <iostream>
    using namespace std;
    
    // -- tools
    
    // макет времени компиляции определяет количество элементов массива указанного в аргументе
    template<class T, size_t N> char (&Size(  T (&arr)[N] ) )[N];
    
    
    // -- internal closed implementation --
    int data1[] = {0, 1, 2};
    char data2[] = {42};
    
    const int (  &GetMechaData1()  ) [ sizeof( Size(data1) )  ] { return data1; }
    const char(  &GetMechaData2()  ) [ sizeof( Size(data2) )  ] { return data2; }
              
    // -- API
    
    //--- функции возвращают ссылки на массивы: например такого: const int[ sizeof( Size(data1) ]
    const int (  &GetMechaData1()  ) [ sizeof( Size(data1) )  ];
    const char(  &GetMechaData2()  ) [ sizeof( Size(data2) )  ];
    
    
    // client code
    template<class T, size_t N> void ViewArray(const T (&arr)[N])
    {
        cout<<"data stored: \n";
        for( auto& item: arr )
            cout<< "item : "<<item<<endl;
    }
    
    int main()
    {
        ViewArray( GetMechaData1() );
        ViewArray( GetMechaData2() );
        
       return 0;
    }

    http://rextester.com/AEINWM88529

    Запостил: LispGovno, 18 Января 2014

    Комментарии (7) RSS

    Добавить комментарий