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

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.60
Izual
94 / 119 / 6
Регистрация: 13.11.2012
Сообщений: 1,551
#1

Можно ли заменить обращение к Union без указания типа переменной? - C++

07.03.2014, 08:19. Просмотров 3331. Ответов 53
Метки нет (Все метки)

Можно ли заменить обращение к Union без указания типа переменной?(т.е. без .i .f .str, а просто к "data")
C++
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
#include <stdio.h>
#include <string.h>
 
union Data
{
   int i;
   float f;
   char  str[20];
};
 
int main( )
{
   union Data data;        
 
   data.i = 10;
   printf( "data.i : %d\n", data.i);
   
   data.f = 220.5;
   printf( "data.f : %f\n", data.f);
   
   strcpy( data.str, "C Programming");
   printf( "data.str : %s\n", data.str);
 
   return 0;
}
Что для этого надо сделать? Или есть под мои нужды альтернатива?

Добавлено через 7 минут
Т.е. чтоб при последующем использовании можно было бы сделать так:
C++
1
Lstrcat(data,"Empty");
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2014, 08:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Можно ли заменить обращение к Union без указания типа переменной? (C++):

Можно ли использовать параметр шаблона без типа? - C++
#define TV(OBJ) typeof(OBJ), OBJ template&lt;class T, T obj&gt; class A {/*...*/}; int f (int); A&lt;TV(f)&gt; a; Можно ли сделать...

Можно ли создать перегрузку самого Union'a? - C++
Возник вопрос. Можно ли создать перегрузку самого Union'a ? Т.е.: struct var { int ps; // pointer size int t; // type ...

Заменить символы в переменной типа String - C++ Builder
Всем привет) Ребят, прокрнсультируйте пожалуйста(т.к. с Билдером пока что на &quot;Вы&quot;): есть строка String str = 09.04.2014; //дата...

Возможно ли обращение к переменной с использованием значения строковой переменной? - C++ Builder
Есть структура из 20ти различных элементов. Необходимо сформировать строковую переменную, которая бы содержала названия переменных и их...

Запуск MapInfo без указания пути в С++ Builder - C++ Builder
Здравствуйте! AnsiString ProjectFileDir = ExtractFilePath(Application-&gt;ExeName); AnsiString mbx_file = &quot;Import.MBX&quot;; ...

.NET 4.x Можно ли передать переменную в класс без указания ее типа - C#
Есть универсальный класс. С дофига и более функциями. И при работе с классом приходится постоянно писать типы переменных в &lt;&gt; Хотелось...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
12.03.2014, 22:19 #31
Цитата Сообщение от Evg Посмотреть сообщение
А почему у int и float должно быть что-то общее?
ну наверно потому что он хочет конвертировать значения
типа записал в int а считал во float
Цитата Сообщение от Evg Посмотреть сообщение
Чтобы что-то хранить в union'е, совсем необязательно, чтобы эти "что-то" имели что-то общее
ну можно сказать( или нельзя ) что union это скрытое приведение

можно ведь и так написать
C++
1
2
3
int a=5;
float *b =(float*)&a;
float c=*b;
но это не значит что в c будет 5.0
Evg
Эксперт CАвтор FAQ
17620 / 5844 / 375
Регистрация: 30.03.2009
Сообщений: 16,118
Записей в блоге: 26
12.03.2014, 22:25 #32
Цитата Сообщение от ValeryS Посмотреть сообщение
ну наверно потому что он хочет конвертировать значения
Это всего лишь твоё предположение. Наличие char[20] явно говорит о том, что предположение некорректное. Первоначальное назначение union'а - это хранить разнотипные значения, а не конвертировать битовые образы значений (последнее, строго говоря, противоречит strict aliasing rules)
DrOffset
7089 / 4230 / 950
Регистрация: 30.01.2014
Сообщений: 7,006
12.03.2014, 22:27 #33

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
типа записал в int а считал во float
Не. Он уже дал понять своим ответом, что это не так.




Если текущий вопрос состоит именно в том, как он подан в его первом посте, то решение для него есть. Но оно не удовлетворит автора по религиозным причинам. Что еще предложить - лично я не знаю.
Могу привести код, если хотите.
Izual
94 / 119 / 6
Регистрация: 13.11.2012
Сообщений: 1,551
12.03.2014, 22:56  [ТС] #34
Evg, спасибо большое за разъяснения, у меня честно уже терпения не хватает. Люди выдумывают на ходу что хотят, а первые две страницы вообще не читали. Отсюда, ну не то чтобы я в бешенстве, но это уже не этично, и потому я уже начинаю думать что с стенкой разговариваю)))

Цитата Сообщение от Evg Посмотреть сообщение
кроме экономии 5 букв
Дело в том что я хочу динамики, т.е. всегда обращяться к переменной var[i](ну точнее, т.к. var это структура, то обращение будет к члену - union, тогда к var[i].v), а если делать по стандарту, то придётся под каждую функцию в последующем подписывать тип, что для меня является непонятным. Ведь если функция strcpy например в аргументе несёт тип char*, то ясен пень(опять лыжи не едут или у меня слишком идеальная логика, что создатели Си до этого не додумались) что var[i].v будет обращена к var[i].v.str (т.е. к char* типу), другое дело что типа такого нет например в моём union'е, но на это бы естественным образом при вызове функции вышла бы ошибка(ну это по логике), что мол - вы передали переменную, которая не имеет типа char*. (учитывая что логика основана НЕ на идеальных знаниях Си, о чём написал фразой "найти инфу")...

Цитата Сообщение от DrOffset Посмотреть сообщение
двусмысленно прозвучала
Ты всё правильно понял, она так и предполагала своё значение. Почему - потому что ты не читал первые две страницы, но написал комент, в итоге всё что ты написал - повторение того о чём уже было сказано. Вот после таких ответов - рождается оффтоп и тема уходит в отстой, либо продолжать её безсмысленно.
Цитата Сообщение от DrOffset Посмотреть сообщение
дал совершенно корректную ссылку
Знаеш фразу - "в бочке мёда ложка дёгтя"? Тут получилось наоборот "в бочке дёгтя ложка мёда", я потому и не зашёл на неё.(щяс зайду гляну)
Цитата Сообщение от DrOffset Посмотреть сообщение
примеры полиморфизма на Си, если есть затруднения в самом предмете
Предмет то как называется? ~ ~ (или вы думаете что я в вузе учусь - нет, отучился - бросил из за непоследовательности даваемых знаний, которые естественно не усваивались, потому что предыдущие этапы не были пройдены, это у нас в системе образования дырки)
Цитата Сообщение от DrOffset Посмотреть сообщение
помогать людям
"благими намерениями дорога в ад вымощена"... почему - потому что есть ещё целый пласт знаний и этики, кому и как давать, и другие производные вопросы - потому не каждый может являться учителем(вот видите, у меня даже принимаемая информация от первого вашего поста уже не воспринялась, имею ввиду ссылку), ну это не беда, мы потому и в этом матерриальном мире - потому что эгоистичны и не приняли бога и его канонов(это так философия вед, чтоб вы не расстраивались, а извлекли урок и учтя его - не наступали дважды на грабли)
Evg
Эксперт CАвтор FAQ
17620 / 5844 / 375
Регистрация: 30.03.2009
Сообщений: 16,118
Записей в блоге: 26
12.03.2014, 23:05 #35
Цитата Сообщение от Izual Посмотреть сообщение
Люди выдумывают на ходу что хотят
Имеем два факта:

1. Ты не знаешь базовых основ языков Си и Си++, но полез делать что-то сложное, которое толком даже объяснить не можешь
2. Внятно поставленный вопрос - это половина ответа

В качестве результата ты получил ровно то, что должно в теории вытекать из этих двух фактов - кучу ответов на вопросы, которые ты не задавал и тебе не интересны.

Цитата Сообщение от Izual Посмотреть сообщение
Ведь если функция strcpy например в аргументе несёт тип char*, то ясен пень(опять лыжи не едут или у меня слишком идеальная логика, что создатели Си до этого не додумались) что var[i].v будет обращена к var[i].v.str
Я тебя огорчу, но у тебя лыжи не едут. В соответствии с п.1, описанным выше

Цитата Сообщение от Izual Посмотреть сообщение
Дело в том что я хочу динамики, т.е. всегда обращяться к переменной var[i]
Ты хочешь слишком много. В итоге получишь огромный геморрой, единственным позитивным моментом которого будет экономия 5 букв при написании кода.
Izual
94 / 119 / 6
Регистрация: 13.11.2012
Сообщений: 1,551
12.03.2014, 23:57  [ТС] #36
Цитата Сообщение от Evg Посмотреть сообщение
Ты не знаешь базовых основ языков Си и Си++
Ты тоже выдумщик я смотрю. "Базовые основы" это первые две главы любой нормальной книги по С/С++, это БАЗОВЫЕ ОСНОВЫ. Если ты не корректно выразился - получил что сказал.(ты же мне тут карму во плати устраиваеш, я потягяюсь ибо уже больше 5 лет варюсь в веданте)
Цитата Сообщение от Evg Посмотреть сообщение
полез делать что-то сложное
Я что должен на форуме простые вопросы поднимать, о которых в книгах написано? Вы видимо не поняли с кем имеете дело.
Цитата Сообщение от Evg Посмотреть сообщение
даже объяснить не можешь
Но почему то первые два ответа на первой странице были в точку по поставленному вопросу. Я лишь продолжил тему, которую мне подкинули в 4 посте - захотел автоматизации.(тут уже пошло поехало)
Цитата Сообщение от Evg Посмотреть сообщение
Внятно поставленный вопрос - это половина ответа
Кэп. Тем более что я сказал что я с ведами дела имею, ЛОГИЧНО же было предположить что я знаю и применяю написанную вами фразу.(повториться что первые два поста были корректны? т.е. первые двое поняли вопрос, остальные - нет? Так у кого тут лыжи то не едут?)
Цитата Сообщение от Evg Посмотреть сообщение
вытекать из этих двух фактов
Читай выше.
Цитата Сообщение от Evg Посмотреть сообщение
Я тебя огорчу
У меня тут книга под рукой "Программирование высокого уровня С/С++" автор Хабибулин. Книга считается уже не основой(не базовой основой так подавно), а средним+ уровнем, но в ней почему то не описано таких моментов.
Цитата Сообщение от Evg Посмотреть сообщение
Ты хочешь слишком много
Может к первому посту данной темы обратишся? Я по моему ясно задал вопрос, что мне нужна информация (можно или нельзя) +свои "религиозные принципы" как тут выразились. И в чём проблема? - Написал бы: "Имхо, нельзя." и пошёл бы дальше. Но нет, надо же в теме остановиться и устроить срач... Эй люди, здесь есть те кто знает слово "этика" и мудр(т.е. применяет знание этики)?..
Цитата Сообщение от Evg Посмотреть сообщение
экономия 5 букв
Ты подписывай "Имхо" рядом со своим комментом, чтобы не выглядело как "взгляд профессионала". Если ты не знаеш за чем - значит ты не напряг мозг или оно тебе не надо. Я лично знаю что мне надо и куда я двигаюсь, у меня уже 15000 строк кода рабочей программы. Вопрос в том что даёт язык Си того что я хочу или нет. Программирование - это логика, причём исходя из того что практически ничего не знал 2 года назад о Си(ну только совсем базу, которая даётся в книжках типа "С/С++ в задачах и примерах", т.е. умение пользоваться операторами, библ. функциями и построением алгоритмов), то очень уж странно, как же так за год я написал программу и изучил для её построения столько, сколько и вуз не даёт за 3 года, если вообще даёт?.. Это риторический вопрос, отвечать на него не надо. Это я к тому, что логика является базовым ключём к пониманию самой сути программирования. А вот то что я не знаю внутренностей(как устроено) таких вещей как union(ну в простых - обычных случаях, инфы по которой 99% я без проблем разбираюсь) это естественно, потому что тут уже извините, нужно 10 лет опыта, и т.п. Так для этого форум и создан, как факт того что люди изучающие глубоко программирование - могли бы делиться опытом. А вы начинаете упрекать меня в том что я куда то там залез в дебри. Не нравится - пройдите мимо, не провоцируйте.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
13.03.2014, 00:00 #37
Цитата Сообщение от DrOffset Посмотреть сообщение
Маленькое дополнение по union. Если мы положили в union int, то доставать из union мы тоже должны int. Любые другие комбинации - это неопределенное поведение.
C++
1
2
3
4
5
union foo_int
{
    int value;
    char bytes[sizeof(int)];
};
тоже неопределенное поведение? в общем давайте-ка цитату из стандарта

Не по теме:

мы настолько суровы, что разрабатываем под микроконтроллеры семейства Х с использованием компилятора от вендора Y, потому замечания о возможном различии порядка байт не принимаются

DrOffset
7089 / 4230 / 950
Регистрация: 30.01.2014
Сообщений: 7,006
13.03.2014, 01:56 #38
Цитата Сообщение от Izual Посмотреть сообщение
Предмет то как называется?
Предмет разговора - "полиморфизм".

Цитата Сообщение от Izual Посмотреть сообщение
Ты всё правильно понял, она так и предполагала своё значение.
Значит и вывод я сделал верный, уж извини.

Цитата Сообщение от Izual Посмотреть сообщение
Тут получилось наоборот "в бочке дёгтя ложка мёда", я потому и не зашёл на неё
Ты преувеличиваешь.

Цитата Сообщение от Izual Посмотреть сообщение
почему - потому что есть ещё целый пласт знаний и этики, кому и как давать, и другие производные вопросы - потому не каждый может являться учителем
Учитывая, что ты не являешься экспертом в этом вопросе, и даже озвученный экспертом взгляд на этот вопрос был бы субъективен (особенно сделанный на основании одного единственного поста), позволю себе пропустить это замечание и последующую не относящуюся к теме философию мимо ушей


Итак, возвращаясь к теме:
Цитата Сообщение от Izual Посмотреть сообщение
Дело в том что я хочу динамики, т.е. всегда обращяться к переменной var[i](ну точнее, т.к. var это структура, то обращение будет к члену - union, тогда к var[i].v), а если делать по стандарту, то придётся под каждую функцию в последующем подписывать тип, что для меня является непонятным.
union в Си слишком базовая структура, чтобы к ней можно было применять высокоуровневую (в смысле высокого уровня абстракции) логику. Поэтому и не срастаются концы с концами. Есть два выхода - Первый - сменить язык. На более простой и более высокоуровневый. Там будет и рефлекшн, и встроенный вариантный тип, и решение многих других вопросов, с которыми тебе еще предстоит столкнуться в С и С++.
Второй выход воспользоваться приведенным ниже (или подобным) решением.
Хотя по моему мнению, это решение может быть применено только в чисто академических целях, причины этого озвучил Evg (не за чем ради 5ти лишних символов городить огород). Я оставляю это здесь будучи уверенным на 99%, что ты не будешь этим пользоваться. Однако, данная тема доступна всем и кому-то в целях изучения возможностей языка может быть интересно (требуется С++11):
C++
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
#include <cstdio>
 
int main()
{
// это только пример написанный за полчаса и не претендует на полноту
    variant<char, float, int> var;
 
//var.type() возвращает индекс элемента union.
//по нему можно проверять корректность
 
// тип автоматически выбирается в зависимости от присваиваемого значения
    var = 2.3f; // тип float
    float v1 = var;
    printf("%0.1f - type %d\n", v1, var.type());
 
    var = 2;    // тип int
    int   v2 = var;
    printf("%d - type %d\n", v2, var.type());
 
    var = 'd';  // тип char
    int   v3 = var;
    printf("%c - type %d\n", v3, var.type());
 
    //var = 2.3; // тип double, ошибка компиляции
}
Реализация

C++
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <type_traits>
 
// базовый тип для доступа
// standard-layout, на этом строятся все остальные допущения.
struct base_type { int type; };
 
// непосредственно значение
template <typename T>
struct declare_value : base_type { T value; };
 
// поиск индекса
template <typename UnionT, typename T, size_t Idx = 0, size_t Count = UnionT::size>
struct find_index
    : std::conditional
      <
          std::is_same<typename UnionT::head_t, declare_value<T>>::value
              , std::integral_constant<size_t, Idx>
              , find_index<typename UnionT::tail_t, T, Idx + 1>
      >::type
{ };
 
template <typename UnionT, typename T, size_t Idx>
struct find_index<UnionT, T, Idx, 1>
    : std::integral_constant<std::size_t, Idx>
{
    static_assert(std::is_same<typename UnionT::head_t, declare_value<T>>::value
                        , "Type is not allowed for this union");
};
 
// построение union исходя из кол-ва аргументов
template <typename Arg, typename ...Args>
struct union_traits
{
    union type
    {
        enum { size = sizeof...(Args) + 1 };
 
        typedef declare_value<Arg>                    head_t;
        typedef typename union_traits<Args...>::type tail_t;
 
        head_t head;
        tail_t tail;
    };
};
 
template <typename Arg>
struct union_traits<Arg>
{
    union type
    {
        enum { size = 1 };
 
        typedef declare_value<Arg>  head_t;
        typedef void               tail_t;
 
        head_t head;
    };
};
 
// интерфейс
template <typename ...Args>
struct variant
{
    typedef typename union_traits<Args...>::type union_t;
    union
    {
        union_t    value;
        base_type  generic;
    }
    value;
 
    template <typename T>
    variant & operator=(T const & val)
    {
        value.generic.type = find_index<union_t, T>::value;
        static_cast<declare_value<T> &>(value.generic).value = val;
        return *this;
    }
    template <typename T>
    operator T() const
    {
        return static_cast<declare_value<T> const &>(value.generic).value;
    }
    int type() const
    {
        return value.generic.type;
    }
    template <typename T>
    variant(T const & val)
    {
        value.generic.type = find_index<union_t, T>::value;
        static_cast<declare_value<T> &>(value.generic).value = val;
    }
    variant()
        : value()
    {}
};

Демонстрация

Добавлено через 11 минут
Цитата Сообщение от Jupiter Посмотреть сообщение
тоже неопределенное поведение? в общем давайте-ка цитату из стандарта
Да пожалуйста.
9.5/1
In a union, at most one of the non-static data members can be active at any time, that is, the value of at most one of the non-static data members can be stored in a union at any time.
Однако есть допущение, которое я использовал в своем примере, чтобы остаться в рамках стандарта:
Note: One special guarantee is made in order to simplify the use of unions: If a standard-layout union contains several standard-layout structs that share a common initial sequence (9.2), and if an object of this standard-layout union type contains one of the standard-layout structs, it is permitted to inspect the common initial sequence of any of standard-layout struct members; see 9.2. —end note
Однако приведенный тобой пример к нему не относится.
Да, я знаю что этот union cast работает почти везде. Однако это не дает повода утверждать, что он стандартен
elivin
13.03.2014, 08:03
  #39

Не по теме:

Evg, тоже советую посмотреть эту тему, чтобы было ясно, что тут происходит (хотя, в данной теме тоже уже достаточно материала). По крайней мере, там есть:
1. чего вообще на самом деле хочет Izual
2. его реальный уровень (Вами, правда, уже определённый)

SatanaXIII
13.03.2014, 10:17
  #40
 Комментарий модератора 
Господа, в особенности уважаемый Izual, увижу еще один пост в котором будет два экрана обсуждения не особенностей языка, а друг друга, приму какие-нибудь меры.

P.S. Персонально для Izual: вы первый начали лезть в узкое место торцевой части морского огурца. Если вам так претит любая, пусть даже и не абсолютно четко по теме, критика, то может не стоит вообще ни с кем разговаривать?
P.P.S. Персонально для Evg: ну хочется человеку сократить пять букв. Вы попробовали отговорить от того, что по вашему кажется не разумным - не получилось. Теперь можете либо помочь ему в этом, либо не помочь.
Izual
94 / 119 / 6
Регистрация: 13.11.2012
Сообщений: 1,551
13.03.2014, 11:09  [ТС] #41
SatanaXIII, вопрос был сформулирован ещё на первой странице. Первые ответившие сильно помогли разобраться, потом "понаехали" лица с вопросами "зачем и почему", начался полный оффтоп. Тут опять я виноват в том что люди не видят вопроса?..
А если вы как модератор решили выполнять свои обязанности, то "лишь бы что написать" - это не выход, читайте внимательнее что написано на первых двух страницах. Решили левого найти - если это у вас лично такой выход из складывающихся ситуаций, то чтож, бог вам судья.(или владелец сайта)
Я лично тут обсуждаю конкретный вопрос о union. И он до сих пор открыт.
Верно, это уже не первая тема в которой начинаются офф топ сообщения, видимо потому что кто то не читает цель темы, а кто то тешит своё самолюбие фразами "посмотрите у него всего 2 сантиметра".
Цитата Сообщение от SatanaXIII Посмотреть сообщение
вы первый начали лезть в узкое место торцевой части морского огурца.
Вы когда пишите подобное, приводите конкретный пост и фразу, которая стала причиной ухода от темы.
Цитата Сообщение от SatanaXIII Посмотреть сообщение
по теме, критика
Была бы по теме, хотя бы немного - был бы разговор, но тут уже балаган развели и начали меряться "кто круче".
Цитата Сообщение от SatanaXIII Посмотреть сообщение
не стоит вообще ни с кем разговаривать?
Если не по теме - то конешно не стоит, а тот кто начинает оффтопить - провоцирует. (между прочим провокация - уголовно наказуема)
Цитата Сообщение от SatanaXIII Посмотреть сообщение
ну хочется человеку сократить пять букв
Если вам в голову пришло только это, то это не значит что я по другому не могу использовать то чего я хочу. Не меряйте по себе. А объяснять для чего мне нужно данное - второй раз запостил elivin на ссылку о предыдущей теме, где тот кому надо было - прочли и поняли, что я делаю интерпритатор, да и тут уже звучало это слово. То что я "якобы полез слишком далеко и мой уровень знаний не соответствует поставленной задаче" - так тут всё просто: не хочеш помогать - уйди из темы, но нет ведь надо остановиться, написать ерунду какую то, растянуть тему до 100 страниц, запутать всех окончательно и ещё с недовольством уйти... Не этично.

Так, по теме. Мне до сих пор не понятно, почему же функции, требующие определённый тип аргумента не могут "сами" выбрать этот тип.(из структуры с union варьирующейся переменной~) Внятного ответа я не услышал.
SatanaXIII
Супер-модератор
Эксперт С++
5609 / 2643 / 244
Регистрация: 01.11.2011
Сообщений: 6,502
Завершенные тесты: 1
13.03.2014, 11:35 #42
Izual, смотрите, сейчас я подам пример как правильно поступать в таких ситуациях:
 Комментарий модератора 
Izual, 3.1, 3.2, 6.5, 6.6 - последнее предупреждение.

Видели? Я не втянулся ни в какую демагогию, вне зависимости от того принял ли я ваши слова на свой счет или нет, никакого оффтопа и пространственных рассуждений, никакого перехода на личности.
Старайтесь быть более спокойным и не считайте априори, что каждое кем-то написанное слово имеет целью вас задеть.
Спасибо за ваше терпение и понимание.
DrOffset
7089 / 4230 / 950
Регистрация: 30.01.2014
Сообщений: 7,006
13.03.2014, 11:38 #43
Цитата Сообщение от Izual Посмотреть сообщение
Мне до сих пор не понятно, почему же функции, требующие определённый тип аргумента не могут "сами" выбрать этот тип.(из структуры с union варьирующейся переменной~) Внятного ответа я не услышал.
Как я уже писал:
Цитата Сообщение от DrOffset Посмотреть сообщение
union в Си слишком базовая структура, чтобы к ней можно было применять высокоуровневую (в смысле высокого уровня абстракции) логику
Выражаясь другими словами, union прост настолько, насколько это возможно. Поэтому он и не делает этого. Такова философия языка.
При желании получить более "умное" поведение от union, нужно будет написать это самому или найти библиотеку, которая это делает. Это тоже философия языка.
Izual
13.03.2014, 11:56  [ТС]
  #44

Не по теме:


Пункт 3.1 - Уважать и убийцу можно.(но нужно ли?) Но даже не смотря на то что у меня сильное негодование ещё с 11 и 13 поста возникать стало - я не стал оскорблять автора, я ему корректно сказал прекратить задавать не нужные вопросы из за которых теряется суть темы и она уходит в оффтоп.
Пункт 3.2 - Где вы конфликты видите? Я кореекто сказал не задавать не нужных вопросов и не оффтопить - или я не имею право сделать это в своей теме?(мне что делать повторную тему из за того что начинается балаган на 3 страницы?)
Пункт 6.5 - написано "касательно прямых обязанностей", а про "огурец" - это было ваше личное мнение, не касающееся обязанностей.
Пункт 6.6 -

Цитата Сообщение от Izual Посмотреть сообщение
ну хочется человеку сократить пять букв
а это не втягивание в демогогию?.. как то вы странно интерпритируете обсуждаемый вопрос касающейся темы(именно темы!) На что я естественно ответил - что то что вы думаете о "пяти буквах" это не так, я пояснил и это пояснение касается темы.
Цитата Сообщение от SatanaXIII Посмотреть сообщение
целью вас задеть
А я так и не думаю. Я пояснил, что не уважение к автору темы было порождено оффтоп сообщениями, к тому же потом подкрепилось тем что один из постеров не читавший первые две страницы с "бухты барахты" что то написал. С этим он сам согласился.
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Старайтесь быть более спокойным
Каждый заслуживает то чего он добивается, я вот вопрос с union тут поднял, естественно я хочу ответы по теме, я же показал ещё в первом посте что я хочу:
Цитата Сообщение от Izual Посмотреть сообщение
Lstrcat(data,"Empty");
чтоб без указания типа использовалась переменная. А мне начали задавать дурацкий вопрос "как использовать", ну это же "слышу звон да не знаю где он".

DrOffset
7089 / 4230 / 950
Регистрация: 30.01.2014
Сообщений: 7,006
23.03.2014, 17:02 #45
Цитата Сообщение от Izual Посмотреть сообщение
Ну так он же реализовал классами(и как я понимаю вектором), union тут не причём, суть в способе реализации, способ через структуры(коим я воспользуюсь) или же через классы и векторы(о котором и была речь).
Он реализовал через union, просто добавив туда шаблонные методы. Суть в том, что union сам по себе представляет опасность, потому что позволяет хранить разнородные типы без проверки на совместимость. Поэтому добавив туда шаблоны (которые С++ templates) без проверок, мы еще больше усугубляем ситуацию. Однако, если сделать все правильно, то его способ, но чуть доработанный окажется более безопасным, чем способ без шаблонов. Поэтому сам по себе способ реализации тут не причем, речь идет о правильности. Центральная мысль, которую я пытаюсь до тебя донести: инструмент (в данном случае шаблоны) не влияет на качество, на качество влияет только исполнитель (программист).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2014, 17:02
Привет! Вот еще темы с ответами:

Обращение к файлу без указания полного пути - Objective-C
Народ, у меня такая проблема. Тут не objective-c а просто shell скрипт. Я создал программу, которой для работы требуется еще один файл....

Массив с единственной ячейкой: можно ли обращаться к нему без указания индекса? - Lazarus
Есть вопрос: если в массиве инициализирована всего одна ячейка, и иначе не предвидется в ходе выполнения всей программы, можно ли...

Как можно удалить все элементы из List без указания диапазона и индекса? - C#
че-то так не получается digit.Remove();

Обратиться к переменной класса без указания самого класса - C#
Вот код: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; ...


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

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

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