Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Преобразование типов

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Sergio66
Гость





СообщениеДобавлено: Вт Сен 09 2003 16:52    Заголовок сообщения: Преобразование типов Ответить с цитатой

Имеются несколько структур, содержащих один и тот же набор элементов, но в разных последовательностях. ({x,y,z};{y,x,z};{z,y,x},...).
Каким образом в С (традиционном) можно организовать такой доступ к элементам этих структур, чтобы в левой части идентификатора структуры указать некую переменную, которая бы определяла тип требуемой в данный момент структуры.
Т.е., при различных условиях данные интерпретируются по разному (разные типы структур) нужно, чтобы не при каждом обращении к элементу структуры выставлять преобразователь типа, а, проверив условие, установить некую переменную в нужный тип и с ее помощью (в левой части идентификатора) добираться до нужных элементов структур.
Буду признателен за совет.
Вернуться к началу
grayrat



Зарегистрирован: 30.06.2003
Сообщения: 189

СообщениеДобавлено: Вт Сен 09 2003 17:28    Заголовок сообщения: Re: Преобразование типов Ответить с цитатой

Пиши на С++ ! на чистом С корявее выходит. Я драйвера на плюсах писал, и ничего, до сих пор пользуются

#include <stdio.h>

enum Styp { typ1, typ2, typ3 };

struct S1 { int a; };
struct S2 { char b; };
struct S3 { double c; };

struct hameleon
{
   int typ;
   union
   {
  &nbs p  S1 s1;
     S2 s2;
     S3 s3;
   };
};

void main()
{
  hameleon h = {typ3};

  switch( h.typ )
  {
    case( typ1 ): { S1 &s = h.s1; s.a = 15; printf("%d\n", s.a); }; break;
    case( typ2 ): { S2 &s = h.s2; s.b = 15; printf("%c\n", s.b); }; break;
    case( typ3 ): { S3 &s = h.s3; s.c = 15.5; printf("%g\n", s.c); }; break;
  }
}
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Sergio66
Гость





СообщениеДобавлено: Вт Сен 09 2003 17:44    Заголовок сообщения: Re: Преобразование типов Ответить с цитатой

К сожалению, на С++ не могу, я пишу на кросс средствах. На обычном С можно сотворить?
Вернуться к началу
Sergio66
Гость





СообщениеДобавлено: Вт Сен 09 2003 17:45    Заголовок сообщения: Re: Нужно на традиционном С Ответить с цитатой

На С++ не могу, пишу на кросс средствах.
Вернуться к началу
Sergio66
Гость





СообщениеДобавлено: Ср Сен 10 2003 11:57    Заголовок сообщения: Re: Преобразование типов Ответить с цитатой

Все равно, на каждый тип структуры требуется свой блок обработки, т.к. видимость s ограниченв блоком case. А нужно, чтобы блок обработки был один - универсальный для всех типов структур, т.к. правые части идентификаторов переменных - полей структур в моем случае одинаковы.
Вернуться к началу
grayrat



Зарегистрирован: 30.06.2003
Сообщения: 189

СообщениеДобавлено: Чт Сен 11 2003 10:52    Заголовок сообщения: Re: Преобразование типов Ответить с цитатой

Честно говоря, я нихрена не понял вопрос. Напиши как ты себе это представляешь в виде кода на воображаемом языке, а потом подумаем как это подогнать под С. И с комментариями !!!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...