Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Sergio66
Сообщений: n/a
#1

Преобразования типов - C++

16.11.2009, 17:19. Просмотров 774. Ответов 3
Метки нет (Все метки)

Имеются несколько структур, содержащих один и тот же набор элементов, но в разных последовательностях. ({x,y,z};{y,x,z};{z,y,x},...).
Каким образом в С (традиционном) можно организовать такой доступ к элементам этих структур, чтобы в левой части идентификатора структуры указать некую переменную, которая бы определяла тип требуемой в данный момент структуры.
Т.е., при различных условиях данные интерпретируются по разному (разные типы структур) нужно, чтобы не при каждом обращении к элементу структуры выставлять преобразователь типа, а, проверив условие, установить некую переменную в нужный тип и с ее помощью (в левой части идентификатора) добираться до нужных элементов структур.
Буду признателен за совет.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2009, 17:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Преобразования типов (C++):

преобразования типов - C++
void foo(int i) {...} string str("abcdef"); //..... enum BoardLetter {a = 0, b, c, d, e, f, g, h}; foo( ...

Преобразования типов - C++
Доброго времени суток. Заранее извиняюсь если подобная тема уже была,но найти я не смог. Встал следующий вопрос. Можно ли,обращаясь к...

Преобразования типов - C++
Почему можно присваивать символьной переменной типа char целые числа? И наоборот, целочисленному типу int можно присваивать символы....

Преобразования типов - C++
Имеется такое выражение t=(i*j)*((e^(x))) ,где t-double x,i,j-int e-float Когда подставляю значения и считаю выдает...

Преобразования типов - C++
Доброго времени суток. Разбираясь с преобразователями типов в С++ возник вот такой вопрос: допустим у нас есть класс Alpha и какая-то...

Ошибка преобразования типов - C++
В чем именно я ошибся,если код ошибки #include <iostream> #include <stdlib.h> #include <string> #include <ctype.h> using...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
palva
2609 / 1831 / 262
Регистрация: 08.06.2007
Сообщений: 6,989
Записей в блоге: 4
16.11.2009, 21:59 #2
Что-нибудь вроде этого?
Код
#include <stdio.h>

union tu {
	struct ta {
		int x,y,z;
	} a;
	struct tb{
		int y,x,z;
	} b;
	struct tc {
		int z,y,x;
	} c;
};

void main() {
	union tu u;
	u.a.x = 5;
	u.a.y = 15;
	u.a.z = 25;
	printf('%d
', u.b.x); // 15
}
Sergio66
Сообщений: n/a
16.11.2009, 22:24 #3
Я читаю блок данных из внешнего устройства. Внешних устройств может быть n типов. Все они отличаются размерами блоков данных и размещением переменных в них. Но, каждый из них имеет в своем составе несколько переменных с одинаковым именем, типом и смыслом. Расположены, правда они с разными смещениями относительно начала блока. Я описал n структур, которые являются как бы масками. Создал объединение со входным массивом. теперь стоит задача, определив тип внешнего устройства, выбрать нужную структуру-маску.
Т.е. я хочу, чтобы код выглядел примерно так:

union
{
char array[100];
struct1 S1;
struct2 S2;
.
.
.
structn Sn;
}U;

struct1 *pointer;
...

switch (condition)
{
case(1) {pointer = (struct1)pointer;} break;
case(2) {pointer = (struct2)pointer;} break;
.
.
.
case(n) {pointer = (structn)pointer;} break;
}

x = pointer->var;

т.о. всякий раз pointer принимает тип нужной структуры, т.е. на массив данных мы накладываем всякий раз нужный нам шаблон. Т.к. обращений к переменным структуры много, то такой подход оправдан с точки зрения эффективности кода. Однако, С не разрешает такие преобразования типа.
Вот я и ищу обходный маневр.

P.S.
Опущенные части идентификатороы связаны не с незнанием С, а с нежеланием писать лишнее.
palva
2609 / 1831 / 262
Регистрация: 08.06.2007
Сообщений: 6,989
Записей в блоге: 4
17.11.2009, 11:57 #4
Чтобы реализовать присваивание

x = pointer->var;

так и хочется перейти на C++. А в рамках C не приходит в голову ничего кроме как использование функций, анализирующих тип

x = getvar(pointer);

setvar(pointer, value);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2009, 11:57
Привет! Вот еще темы с ответами:

Преобразования типов данных - C++
Допустим если объявить функцию Determinant типа void, как сделать чтоб возвращаемые ей значения return(d) были типа int ? #include...

Преобразования стандартных типов - C++
Добрый день, можете пожалуйста кинуть какой-нибудь FAQ по критическим преобразованиям стандартных типов в языке Си(++). Например, ...

операторы преобразования типов - C++
что но не пойму сам принцип работы опреаторов преобразования.. вот к примеру: class Cat{ public: Cat(){itsAge=192;} ...

Объяснить преобразования типов - C++
Добрый день, можете объяснить последовательность дейстий, что происходит в ходе преобразований. unsigned short x = 1; cout &lt;&lt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.11.2009, 11:57
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru