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

С++ для начинающих

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

Возожно ли создать массив указателей на шаблоны функций? - C++

16.07.2014, 14:29. Просмотров 688. Ответов 15
Метки нет (Все метки)

Можно ли создать массив указателей на шаблоны функций, если да, то как? Пробовал вот так
C++ (Qt)
1
template <class my_type> void my_func( my_type* input_arr)
потом пытался запихнуть my_type* как аргумент функции, но компилятор ругается на то, что my_type не объявлен

можно конечно сделать так:
C++ (Qt)
1
2
void (*p)(int*) = &my_func<int>;
void (*pp)(float*) = &my_func<float>;
но тогда получится несколько массивов указателей на функции: первый, где аргументами функций будут int, второй, где аргументы float, и т.д. Но хочется, чтобы все было сведено в 1 массив
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2014, 14:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Возожно ли создать массив указателей на шаблоны функций? (C++):

Шаблоны функций и массив указателей - C++
Задание! Создайте шаблонную функцию maxn(), которая принимает в качестве аргумента массив элементов типа Т и целое число, представляющее...

Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей - C++
Задача: создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей. Вернуть адрес...

Создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей - C++
Нужно создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей. Эта специализация...

Одномерные массив (Шаблоны функций) - C++
Задание. Вот задание из одномерных массивов Вот решенное задание из одномерных массивов #include &lt;vcl.h&gt; #pragma...

Шаблоны функций и двумерный массив - C++
Задание следующее: программа работает с двумерным массивом, получает размерность и элементы, выводит матрицу на экран. Далее подсчитывает...

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

15
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
16.07.2014, 14:46 #2
Стоит заметить, что сигнатура функции определяет тип указателя. Поэтому ваш вопрос можно перефразировать следующим образом: Возможно ли поместить в массив различные типы указателей? Ответ на него я полагаю вы и сами знаете.
0
Uasya
0 / 0 / 0
Регистрация: 26.06.2014
Сообщений: 14
04.08.2014, 15:18  [ТС] #3
Глупый вопрос : а действительно, можно ли в массив запихнуть указатели разных типов, и если да, то как? (через приведение к void* ?)
0
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 733
Записей в блоге: 1
04.08.2014, 15:34 #4
Цитата Сообщение от Uasya Посмотреть сообщение
через приведение к void*
Можно, только кто вам потом скажет, что там за тип лежит? Для языка типа Си++ такое малость бессмысленно и опасно.
0
HighPredator
5545 / 1858 / 346
Регистрация: 10.12.2010
Сообщений: 5,443
Записей в блоге: 2
04.08.2014, 16:20 #5
Цитата Сообщение от Uasya Посмотреть сообщение
можно ли в массив запихнуть указатели разных типов, и если да, то как?
Это теоретически возможно только в том случае если типы пронаследованы от одного базового класса. Тогда с помощью RTTI можно будет определять типы и работать. Но не очень удачная идея имхо.
0
Uasya
0 / 0 / 0
Регистрация: 26.06.2014
Сообщений: 14
04.08.2014, 16:32  [ТС] #6
а как же тогда организовать следующее: есть сколько-то функций, каждая из которых принимает двумерный массив (одна получает int, другая float и тд) и выплевывает также двумерный (так же разных типов). Так вот хочется, чтобы в какой угодно последовательности можно было б вызывать эти самые функции (т.е чтобы можно было б пустить выходные данные одной на вход другой).
Но кроме варианта с организацией массива, где хранится сборная солянка типов (или реализовать это с помощью написания своего класса-обертки) - ничего больше на ум не приходит. Можно ли это решить как-то проще
0
HighPredator
5545 / 1858 / 346
Регистрация: 10.12.2010
Сообщений: 5,443
Записей в блоге: 2
04.08.2014, 16:37 #7
Есть соответствие вида: принял float -> вернул float, принял int -> вернул int -- тогда чисто на шаблонах. Если еще какая-то магия -- надо смотреть суть задачи.
0
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 733
Записей в блоге: 1
04.08.2014, 16:40 #8
Uasya, а чем вас не устраивает ваш первый вариант? С чего это
компилятор ругается на то, что my_type не объявлен
?
0
SatanaXIII
Супер-модератор
Эксперт С++
5638 / 2673 / 252
Регистрация: 01.11.2011
Сообщений: 6,570
Завершенные тесты: 1
04.08.2014, 16:45 #9
Цитата Сообщение от Uasya Посмотреть сообщение
есть сколько-то функций, каждая из которых принимает двумерный массив (одна получает int, другая float и тд) и выплевывает также двумерный (так же разных типов)
А не описали ли вы только что самый обыкновенный шаблон?
C++
1
2
3
4
5
6
7
8
9
template <typename T>
T foo( T pArr )
{
...
return pArr;
}
 
int **a, **b;
b = foo(a);
0
Uasya
0 / 0 / 0
Регистрация: 26.06.2014
Сообщений: 14
04.08.2014, 17:26  [ТС] #10
но дело не только в шаблоне.Рассмотрим самый простой вариант: есть 3 функции
C++
1
2
3
void func1 (int** p)
void func2 (int** p)
void func3 (int** p)
где p - указатель, на массив, куда я складирую указатели на одномерные массивы, в которых хранятся данные, которые выплевывает каждая функция (пусть это некий int array[10][100]). зная соответствие индекса элемента массива и функции, я могу вызвать 1-ю фун-ю, ее вых-е данные запихнуть во вторую, и так, пока мне не надоест.
Но как только появляются массивы разных типов, появляется несколько массивов для складирования, и просто по индексу адресоваться я не могу. если б я мог все свести в один массив - это было б решением моей проблемы ... наверное

подскажите как быть
0
SatanaXIII
Супер-модератор
Эксперт С++
5638 / 2673 / 252
Регистрация: 01.11.2011
Сообщений: 6,570
Завершенные тесты: 1
04.08.2014, 18:32 #11
Трехмерный массив ввести, где напротив каждого указателя будет его тип.
0
Uasya
0 / 0 / 0
Регистрация: 26.06.2014
Сообщений: 14
04.08.2014, 19:10  [ТС] #12
не очень понятно, поясни пожалуйста
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
04.08.2014, 19:36 #13
Цитата Сообщение от Uasya Посмотреть сообщение
где p - указатель, на массив, куда я складирую указатели на одномерные массивы, в которых хранятся данные, которые выплевывает каждая функция (пусть это некий int array[10][100]). зная соответствие индекса элемента массива и функции, я могу вызвать 1-ю фун-ю, ее вых-е данные запихнуть во вторую, и так, пока мне не надоест.
Сложно советовать, когда суть зачем это нужно не раскрывается, а есть только требование "надо так". Ну да ладно.
Может использовать массив тип void * для хранения указателей на твои массивы. А вторым параметром этих функций
Цитата Сообщение от Uasya Посмотреть сообщение
C++
1
2
3
void func1 (int** p) 
void func2 (int** p) 
void func3 (int** p)
передавать тип кокретного сейчас массива? Или действительно завести структуру
C++
1
2
3
4
5
struct array_info
{
    void * array_data;
    int    array_type;
};
И передавать в эти функции массив таких структур? Это будет метаинформацией о настоящем типе конкретного массива. А внутри этих функций уже можно разрулить, например с помощью switch, хоть перегрузкой хоть шаблоном.
Это пока в качестве идеи.
0
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
04.08.2014, 21:55 #14
Не особо понял, но возможно подойдёт функциональный объект?
C++
1
2
3
4
5
6
7
8
9
struct my_func {
 
   template<typename my_type>
   void operator ()(my_type * input_arr) const {
      // ...
   }
};
 
std::vector<my_func> functions;
0
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 733
Записей в блоге: 1
05.08.2014, 07:59 #15
Uasya, вы как-то сумбурно написали, что хотите получить. Уж больно у всех ответы разные. Напишите пример кода, который должен работать, тогда мы вам и реализацию подскажем. Хрустального шара ни у кого нет. У кого есть - на форуме не сидит, на Porshe Cayenne ездит.
0
05.08.2014, 07:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2014, 07:59
Привет! Вот еще темы с ответами:

Дан массив из прототипов функций или указателей на функцию, сделать функцию, возвращающую этот массив - C++
Не охота создавать лишнею тему извиняюсь заранее Вопрос такой Можете подсказать есть массив из прототипов функций или...

опп класс и массив (создать массив указателей по выборке животных, участвующих в забеге) - C++
Здравствуйте! Есть задача... вкратце. Нужно создать массив указателей по выборке животных участвующих в забеге. Это Лошадь, Крокодил,...

Создать динамический массив указателей - C++
Создать динамический массив указателей для сохранения двумерного массива А в динамической памяти. Составить программу для подсчета...

Возможно ли создать массив указателей на перечисления? - C++
Например, мне нужно написать простой код, где будут использоваться перечисления. Возможно ли это организовать через указатели? Пример...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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