powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Traits и VC 6.0 - что за фигня ?
3 сообщений из 3, страница 1 из 1
Traits и VC 6.0 - что за фигня ?
    #32757479
Yossarian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задачка такая : есть некая заранее неизвестная структура с данными
разных типов. Из этих структур потом вектор будет сделан. Так вот,
хочется иметь доступ к элементам этой структуры независимо от их
названий - по номерам. поле 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
Traits и VC 6.0 - что за фигня ?
    #32757597
Tracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имхо бага
Код: 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
Traits и VC 6.0 - что за фигня ?
    #32758448
Yossarian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что теперь с этим делать ?


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


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