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

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

Войти
Регистрация
Восстановить пароль
 
Uasya
0 / 0 / 0
Регистрация: 26.06.2014
Сообщений: 14
03.07.2014, 12:50     Как не писать один и тот же код, для функции, принимающей разные типы данных в качестве аргумента #1
Проблема такая: есть некая функция. Внутри нее происходят одни и теже вычисления, вне зависимости от типа входных данных.
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;
           (далее идут вычисления, одни и теже для всех типов)
       }
   }
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2014, 12:50     Как не писать один и тот же код, для функции, принимающей разные типы данных в качестве аргумента
Посмотрите здесь:

C++ Builder как передать функции в качестве аргумента указатель на функцию описанной в другом классе?
Как передать оконную процедуру в качестве аргумента моей функции? C++ WinAPI
Как передать функции массив в качестве аргумента? C++
Как передать функции указатель на функцию в качестве аргумента? C++
Как будет выглядеть заголовок функции, принимающей в качестве входных параметров два целых числа и возвращающей число с плавающей запятой двойной точн C++
Создание шаблона bool-функции, принимающей в качестве параметра экземпляр класса C++
Шаблон функции и разные типы данных C++ Builder
Как в качестве аргумента функции передать массив? C++
C++ Объяснить назначение функции length(), принимающей в качестве аргумента std::vector
Написать функцию, имеющую одну реализацию, но принимающую в качестве аргументов разные типы C++
Как реализовать стек, хранящий разные типы данных одновременно? C++
Потоки, обрабатывающие разные данные, выдают один и тот же результат C++ WinAPI

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
quwy
Native x86
 Аватар для quwy
2907 / 1879 / 489
Регистрация: 13.02.2013
Сообщений: 6,268
03.07.2014, 13:01     Как не писать один и тот же код, для функции, принимающей разные типы данных в качестве аргумента #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Шаблон вам поможет.
Izual
 Аватар для Izual
93 / 118 / 6
Регистрация: 13.11.2012
Сообщений: 1,525
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 структуре, та и будет обрабатываться.
Uasya
0 / 0 / 0
Регистрация: 26.06.2014
Сообщений: 14
03.07.2014, 14:55  [ТС]     Как не писать один и тот же код, для функции, принимающей разные типы данных в качестве аргумента #4
спасибо большое, все получилось! я про шаблоны слышать - слышал, но зачем они - не интересовался
Yandex
Объявления
03.07.2014, 14:55     Как не писать один и тот же код, для функции, принимающей разные типы данных в качестве аргумента
Ответ Создать тему
Опции темы

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