Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Traits и VC 6.0 - что за фигня ? / 3 сообщений из 3, страница 1 из 1
27.10.2004, 16:27
    #32757479
Yossarian
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Traits и VC 6.0 - что за фигня ?
Задачка такая : есть некая заранее неизвестная структура с данными
разных типов. Из этих структур потом вектор будет сделан. Так вот,
хочется иметь доступ к элементам этой структуры независимо от их
названий - по номерам. поле 1, поле 2 итп. а где-то отдельно объяснить
что есть на самом деле поле 1 и поле 2.

А если обратились к неописанному полю или с неправильным типом -
должна быть ошибка.

Используем traits.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
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.
40.
41.
42.
43.
44.
template<int Q, typename R, typename T> 
struct field
{ 
	static R fn(T *d) 
	{
		return * 0 ; // error
	}
};

template<int i, typename R, typename T> R Field( T& d) {return field<i, R, T >::fn(&d);}

struct data
{
	int a;
	int b;
	float f;
};


template < > 
struct field< 1 , int, data>{ 
	static int fn(data *d) {return d->a;}
}; 

template < > 
struct field< 2 , float, data>{ 
	static float fn(data *d) {return d->f;}
}; 

template < > 
struct field< 3 , int, data>{ 
	static int fn(data *d) {return d->b;}
}; 


void main()
{
	data d = { 1 , 2 , 3 .8787f};

	int i  =  Field< 6577753 , int>(d); // КОМПИЛИРУЕЦЦА !!!
	float j = Field< 2 , float>(d);
	int p   = Field< 3 , int>(d);
	// int q   = Field<4, int>(d); // НЕ КОМПИЛИРУЕЦЦА !!!
}

Это что - ошибка в компиляторе ?

Washington Irving
...
Рейтинг: 0 / 0
27.10.2004, 16:59
    #32757597
Tracer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Traits и VC 6.0 - что за фигня ?
Имхо бага
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
void main()
{
	data d = { 1 , 2 , 3 .8787f};

	int i  =  Field< 6577753 , int>(d);
	float j = Field< 2 , float>(d);
	int p   = Field< 3 , int>(d);
//	int q   = Field<4, int>(d);
             int i2  =  Field< 6577753 , int>(d); // опять не компилируется
}
...
Рейтинг: 0 / 0
28.10.2004, 10:17
    #32758448
Yossarian
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Traits и VC 6.0 - что за фигня ?
И что теперь с этим делать ?


Washington Irving
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Traits и VC 6.0 - что за фигня ? / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]