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

Проблема.(Не знаю даже как ее назвать...) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Проверка на повторение http://www.cyberforum.ru/cpp-beginners/thread373772.html
i = 0; while(x != 0){ int j = 1; while(x != 0){ if(x == x){ cout << i << j; } j++; } i++;
C++ Извините за глупый вопрос. Как в С++ записывается "и"? (Например в Pascal это "and"). И как записать это в условие типа: if (N<1000) "и" (N>100) { bla bla bla } else { bla bla bla } http://www.cyberforum.ru/cpp-beginners/thread373749.html
Ввести масив C++
Как ввести в масив сначала числа с чётным индексом, а потом с не чётным?
Помогите не понимаю WINAPI=( C++
Нужно написать программу используя функции WINAPI, кот при запуске создает окно, кот используется для вывода результатов работы и завершает свое выполнение при его закрытии. Программа с функцией f..перевода числа...
C++ Дано целое число N и набор из N целых чисел. Определить номера тех чисел наборе, которые меньше своего правого соседа, и количество К таких чисел. http://www.cyberforum.ru/cpp-beginners/thread373736.html
Всем привет мне нужен исходник к етой задачи Дано целое число N и набор из N целых чисел. Определить номера тех чисел наборе, которые меньше своего правого соседа, и количество К таких чисел. зарания , спасибо
C++ Помогите пожалуйста с уравнением. Первая - уравнение которое надо решить Вторая картинка пример написания Заранее благодарен. подробнее

Показать сообщение отдельно
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200

Проблема.(Не знаю даже как ее назвать...) - C++

27.10.2011, 21:34. Просмотров 419. Ответов 2
Метки (Все метки)

Небольшое введение, кто не хочет может сразу перейти ко второй части.
У меня есть проблема с написанием части моей программы. Все дошло до того, что у меня есть две переменные, а точнне указатели на них и тип у этих указателей void *. Также у меня есть идентификатор типа переменной. В итоге получается нечто такое: В программе есть enum TYPEID {TYPE_INT = 1, TYPE_FLOAT = 2, TYPE_CHAR = 3, TYPE_VECTOR = 4 и т.д.}. Значит я имею два указателя на переменные: void *a1; void *a2; Также у меня имеются две переменные, которые хранят идентификаторы типа переменной, на которые указывают оба указателя: TYPEID Ta1; TYPEID Ta2; Итак, главная задача! Как мне присвоить в переменную a1 значение переменной a2 с учетом их типов???
Т.е. если Ta1 == TYPE_INT и Ta2 == TYPE_FLOAT, то должно произойти что-то типа такого: *(int *)a1 = *(float *)a2, ну или тому подобному... Проблему модно было бы решить при помощи перебора усроить перебор каждого варианта: if (Ta1 == TYPE_INT && Ta2 == TYPE_CHAR) *(int *)a1 = *(char *)a2; Но еще придется тогда отбрасывать некоторые варианты, ведь в переменную типа int нельзя будет присвоить переменную типа vector и т.п. Вот я и прошу помощи, как это все можно упростить, ведь код получается ОЧЕНЬ громоздким и себя не оправдывает.
Тот же вопрос, но по другому : Раскажу о том, как дошел до всего этого. Мне потребовался класс который будет хранить в себе переменную, тип которой задан идентификатором, получилось нечто такое:
C++
1
2
3
4
5
6
7
8
9
10
11
 
class VTYPE
{
private:
  TYPEID Tid;
  void *Var;
public:
  explicit VTYPE( TYPEID Tid );
  ~VTYPE( VOID );
  template<class TYPE> VTYPE & operator = ( TYPE V );
};
В конструкторе в качестве аргумента мы получаем тип переменной, далее выделяем под нее память.
Основная проблема заключается в перегрузке оператора =. Я нечто набросал, в итоге в содержимом функции получилось нечто на подобии этого:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
switch (Tid)
{
case TYPE_INT:
  *(INT *)Var = V;
  break;
case TYPE_FLOAT:
  *(float *)Var = V;
  break;
case TYPE_VECTOR:
  *(vector *)Var = V;
  break;
}
return *this;
На первый взгляд все бы ничего, но рассмотрим пример:
C++
1
2
3
4
VTYPE T(TYPE_INT); // создаем переменную под тип int
vector V(1,2,3); // заводим вектор с координатами 1, 2, 3
// Выполняем действие
T = V;
У нас по идее вызовется наш перегруженный оператор для типа vector. На этого не произойдет, потому что ошибка появится уже на момент компиляции. Он укажет что операция *(int *)Var = V; невозможна, ведь у нас несовместимость типов. Ну вот я и прошу помощи справиться с моим недугом. Возможно это можно сделать совсем по другому, или обрабатывать какие-либо исключения, короче HELP ME, PLEASE!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru