Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
274 / 64 / 4
Регистрация: 18.04.2011
Сообщений: 1,362
Записей в блоге: 1

Действовать в зависимости от типа переменной

09.12.2014, 23:23. Показов 1135. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
допустим есть массив в которой я хочу добавить по определённым индексам значение всех переменных передаваемой структуры. Проблема возникает при сравнении типа. допустим если Т= структура А то обращаемся к её двум переменным, если Т= структура В то к трем

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
struct A
{
    CString first;
    CString second;
};
 
struct B
{
    CString first;
    CString second;
    CString third;
};
 
template <typename T> void test(T name)
{
    CString str[3];
    if (T == A)
    {
        str[0] = name.first;
        str[1] = name.second;
    }
 
    if (T == B)
    {
        str[0] = name.first;
        str[1] = name.second;
        str[2] = name.third;
    }
};
int _tmain(int argc, _TCHAR* argv[])
{
    A testA;
    B testB;
 
    testA.first = "1";
    testA.second = "2";
 
    testB.first = "1";
    testB.second = "2";
    testB.third = "3";
    test(testA);
 
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.12.2014, 23:23
Ответы с готовыми решениями:

Точность вычислений в зависимости от типа переменной
Доброго времени суток. На Java перешел совсем недавно и сегодня заметил такую вещь: float x1 = -2; float x2 = 5; exactValue...

Возвращаемая информация в зависимости от типа принимающей переменной
Здравствуйте! Читаю книгу &quot;Язык программирования C++. Лекции и упражнения&quot;, и запнулся на одном моменте, который я так и не смог понять: ...

Выбор типа переменной-члена класса в зависимости от параметров передаваемых конструктору
Здравствуйте форумчане! Ответьте пожалуйста на вопрос - возможно ли такое на С++ и если да, то как это реализовать? Имеется класс, в нём...

6
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
10.12.2014, 00:33
magals, можно взять перегрузку функций:
C++
1
2
3
4
5
6
7
void test(A name) {
   // ...
}
 
void test(B name) {
   // ...
}
0
274 / 64 / 4
Регистрация: 18.04.2011
Сообщений: 1,362
Записей в блоге: 1
10.12.2014, 04:37  [ТС]
не вариант. имею желание написать одну функцию. а не каждый раз новую под каждую структуру.
дело в том что дальнейшее решение я хочу использовать в заполнении таблицы. функция будет принимать ссылку на таблицу и ссылку на массив структуры(того или иного типа), и зависимо от типа раскладывать данные по колонкам, как раскладывать это уже будет в блоках if(){}.

когда-то подобное делал на С#, если у нас тип передаваемого параметра доп. button то имеет доступ к свойствам объекта button, если TextBox то получаем доступ к его свойствам и тд. и без каких либо перегрузок функций. но как это делать на с++ я не в курсе

Добавлено через 3 часа 29 минут
да и перегрузку, лично я считаю использовать в подобных примерах это избыточно. перегрузка хороша если зависимо от типов и кол-ва передаваемых параметрах изменяет алгоритм работы функции, но смысл функции остается тот же.

а тут, алгоритм одинаковый, меняется количество переменных к которым обращаемся
0
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
10.12.2014, 12:09
А что vector не подходит?
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
struct A
{
   std::vector<std::string> v;
};
 
struct B
{
   std::vector<std::string> v;
};
 
template <typename T>
void test(std::vector<std::string> & res , T const& t)
{
   res.insert(res.end(), t.v.begin(), t.v.end());
}
 
int main()
{
   A a{{"Hello", "beautiful"}};
   B b{{"world"}};
   std::vector<std::string> res;
   test(res, a);
   test(res, b);
 
   for (auto & str : res)
      std::cout << str << " ";
 
   return 0;
}
1
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
10.12.2014, 12:24
magals, если вы уж совсем прямо очень хотите иметь только одну функцию, то вам только RTTI поможет. Но лично я бы выбрал вариант с перегрузкой. Ну на совсем худой конец специализацию шаблонов.
0
274 / 64 / 4
Регистрация: 18.04.2011
Сообщений: 1,362
Записей в блоге: 1
10.12.2014, 12:30  [ТС]
это хорошо, если в структурах данные сохранены в одном типе, а если в разных например стринг, инт, чар.
но идею возьму на вооружение
0
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
10.12.2014, 12:31
Для этого есть tuple.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.12.2014, 12:31
Помогаю со студенческими работами здесь

Приведение переменной типа object к переменной производного типа в приложенном коде
Добрый день! Столкнулся с проблемой. Есть обработчик события. Обработчик события общий для двух издателей, но издатели разного типа(Пусть...

Как поменять значение числовой переменной в зависимости от значения текстовой переменной
Доброго вам времени суток! Ломаю голову на следующей задачей, и не знаю, где ошибка: может быть в JS или в html коде. Не могу...

Вычислить значение переменной Y по одному из заданных выражений в зависимости от значения переменной X
1)Для Вашего варианта таблицы 4.1 задайте в окне ввода значение переменной X с учетом заданного подтипа данных. При вводе маленьких или...

Изменить имя переменной в зависимости от данных переменной
Задача такова: пользователь вводит сроку и нужно создать объект с именем, как в строке. Пробовал сам, но одни ошибки. Подскажите,...

Переменной d присвоить первую цифру после запятой некоторой переменной x типа float
Нужно целой переменной d присвоить первую цыфру после комы некоторой переменной x типа float Скажите, пожалуйста, с чего начать и по...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru