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

C++

Войти
Регистрация
Восстановить пароль
 
Uasya
0 / 0 / 0
Регистрация: 26.06.2014
Сообщений: 14
#1

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

03.07.2014, 12:50. Просмотров 422. Ответов 3
Метки нет (Все метки)

Проблема такая: есть некая функция. Внутри нее происходят одни и теже вычисления, вне зависимости от типа входных данных.
C++ (Qt)
1
void my_func(void**)
Вопрос: можно ли, передавая в нее данные разных типов: double, unsigned char , float , не писать несколько раз один и тот же код для разного типа данных ( внутри функции или перегружая ее) ; и если можно, то как?
я делал так (но жопой чую, что это самый кривой вариант):
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void my_func(void** arr)
{
   float** arr_fl;
   double** arr_d;
   unsigned char** arr_uch;
 
   switch(flag)
   {
        case 1:
       {
           arr_fl = (float**)arr;
           (далее идут вычисления, одни и теже для всех типов)
       }
       case 2:
       {
           arr_d = (double**)arr;
           (далее идут вычисления, одни и теже для всех типов)
       }
   }
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2014, 12:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как не писать один и тот же код, для функции, принимающей разные типы данных в качестве аргумента (C++):

Шаблон функции и разные типы данных - C++ Builder
Как определить переменная какого типа была передана в шаблон функцию ? Например: int или wchar_t*

как передать функции в качестве аргумента указатель на функцию описанной в другом классе? - C++ Builder
Есть два класса A и B в классе A есть две функции funcA_1 и funcA_2 в классе B - funcB в funcA_1 создается экземпляр класса B и...

Как передать оконную процедуру в качестве аргумента моей функции? - C++ WinAPI
Я пожалуй для своего вопроса не буду создавать новую тему, нашел более менее подходящее под описание мое проблемы. Я в с++ новичок. Это...

Потоки, обрабатывающие разные данные, выдают один и тот же результат - C++ WinAPI
Пытаюсь создать несколько потоков используя CreateThread() , которые используют одну функцию, но с разными параметрами.На выходе у всех...

Объяснить назначение функции length(), принимающей в качестве аргумента std::vector - C++
Добрый день! Подскажите, пожалуйста. Есть такая переменная: vector<float> Yvect C тремя числами: 3 1 0 d=length(Yvect); ...

Как будет выглядеть заголовок функции, принимающей в качестве входных параметров два целых числа и возвращающей число с плавающей запятой двойной точн - C++
1. int a, int b: f ( double ) 2. double f ( int a, int b ) 3. int f ( double a, int b ) 4. f ( int a, int b, return double ) 5....

3
quwy
Native x86
3246 / 2091 / 563
Регистрация: 13.02.2013
Сообщений: 6,983
03.07.2014, 13:01 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Шаблон вам поможет.
1
Izual
94 / 119 / 6
Регистрация: 13.11.2012
Сообщений: 1,552
03.07.2014, 13:51 #3
Если можно, то я предложу свой кривой вариант:
C++
1
2
3
4
5
6
void my_func(char *buf, int type)
{
switch(type)
{
}
}
Передаём строку, предварительно сконвертировав изначальное значение, в зависимости от типа значения второй параметр указывает на то как конвертировать строку обратно (в float, int или что то ещё).

Вариант 2: делать через Union, и передавать его (естественно передавать надо будет структуру в которой членом будет Union). И в зависимости от того какая переменная в Union структуре, та и будет обрабатываться.
1
Uasya
0 / 0 / 0
Регистрация: 26.06.2014
Сообщений: 14
03.07.2014, 14:55  [ТС] #4
спасибо большое, все получилось! я про шаблоны слышать - слышал, но зачем они - не интересовался
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2014, 14:55
Привет! Вот еще темы с ответами:

Создание шаблона bool-функции, принимающей в качестве параметра экземпляр класса - C++
Добрый день. Никак не получается осилить) Суть: есть классы, у которых есть поле str - массив символов. Хочу сделать...

Как в качестве аргумента функции передать массив? - C++
Доброго времени суток! Расскажите, пожалуйста, если не затрудняет, как в качестве аргумента функции передать массив? Функция должна...

Как передать функции массив в качестве аргумента? - C++
Всем привет! Подскажите, как передать функции массив в качестве аргумента? И как сделать, чтобы функция возвращала массив?

Как передать функции указатель на функцию в качестве аргумента? - C++
как передать функции указатель на функцию в качестве аргумента?


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

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

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