- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 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;
}
LispGovno 18.01.2014 17:14 # 0
TarasB 18.01.2014 17:37 # +1
guest 18.01.2014 18:13 # −5
guest 18.01.2014 18:25 # +2
eth0 18.01.2014 19:07 # +2
bormand 18.01.2014 19:12 # +4
guest 18.01.2014 19:18 # +3