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

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

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

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

16.07.2014, 14:29. Просмотров 658. Ответов 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 массив
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2014, 14:29     Возожно ли создать массив указателей на шаблоны функций?
Посмотрите здесь:
Шаблоны функций и массив указателей C++
Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей C++
Создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей C++
C++ Одномерные массив (Шаблоны функций)
C++ Шаблоны функций и двумерный массив
C++ Создать шаблоны функций, выполняющих ввод, вывод и упорядочивание матрицы
C++ Дан массив из прототипов функций или указателей на функцию, сделать функцию, возвращающую этот массив
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1807 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
16.07.2014, 14:46     Возожно ли создать массив указателей на шаблоны функций? #2
Стоит заметить, что сигнатура функции определяет тип указателя. Поэтому ваш вопрос можно перефразировать следующим образом: Возможно ли поместить в массив различные типы указателей? Ответ на него я полагаю вы и сами знаете.
Uasya
0 / 0 / 0
Регистрация: 26.06.2014
Сообщений: 14
04.08.2014, 15:18  [ТС]     Возожно ли создать массив указателей на шаблоны функций? #3
Глупый вопрос : а действительно, можно ли в массив запихнуть указатели разных типов, и если да, то как? (через приведение к void* ?)
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 686
Записей в блоге: 1
04.08.2014, 15:34     Возожно ли создать массив указателей на шаблоны функций? #4
Цитата Сообщение от Uasya Посмотреть сообщение
через приведение к void*
Можно, только кто вам потом скажет, что там за тип лежит? Для языка типа Си++ такое малость бессмысленно и опасно.
HighPredator
5474 / 1840 / 342
Регистрация: 10.12.2010
Сообщений: 5,430
Записей в блоге: 3
04.08.2014, 16:20     Возожно ли создать массив указателей на шаблоны функций? #5
Цитата Сообщение от Uasya Посмотреть сообщение
можно ли в массив запихнуть указатели разных типов, и если да, то как?
Это теоретически возможно только в том случае если типы пронаследованы от одного базового класса. Тогда с помощью RTTI можно будет определять типы и работать. Но не очень удачная идея имхо.
Uasya
0 / 0 / 0
Регистрация: 26.06.2014
Сообщений: 14
04.08.2014, 16:32  [ТС]     Возожно ли создать массив указателей на шаблоны функций? #6
а как же тогда организовать следующее: есть сколько-то функций, каждая из которых принимает двумерный массив (одна получает int, другая float и тд) и выплевывает также двумерный (так же разных типов). Так вот хочется, чтобы в какой угодно последовательности можно было б вызывать эти самые функции (т.е чтобы можно было б пустить выходные данные одной на вход другой).
Но кроме варианта с организацией массива, где хранится сборная солянка типов (или реализовать это с помощью написания своего класса-обертки) - ничего больше на ум не приходит. Можно ли это решить как-то проще
HighPredator
5474 / 1840 / 342
Регистрация: 10.12.2010
Сообщений: 5,430
Записей в блоге: 3
04.08.2014, 16:37     Возожно ли создать массив указателей на шаблоны функций? #7
Есть соответствие вида: принял float -> вернул float, принял int -> вернул int -- тогда чисто на шаблонах. Если еще какая-то магия -- надо смотреть суть задачи.
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 686
Записей в блоге: 1
04.08.2014, 16:40     Возожно ли создать массив указателей на шаблоны функций? #8
Uasya, а чем вас не устраивает ваш первый вариант? С чего это
компилятор ругается на то, что my_type не объявлен
?
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 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);
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-ю фун-ю, ее вых-е данные запихнуть во вторую, и так, пока мне не надоест.
Но как только появляются массивы разных типов, появляется несколько массивов для складирования, и просто по индексу адресоваться я не могу. если б я мог все свести в один массив - это было б решением моей проблемы ... наверное

подскажите как быть
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 1
04.08.2014, 18:32     Возожно ли создать массив указателей на шаблоны функций? #11
Трехмерный массив ввести, где напротив каждого указателя будет его тип.
Uasya
0 / 0 / 0
Регистрация: 26.06.2014
Сообщений: 14
04.08.2014, 19:10  [ТС]     Возожно ли создать массив указателей на шаблоны функций? #12
не очень понятно, поясни пожалуйста
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
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, хоть перегрузкой хоть шаблоном.
Это пока в качестве идеи.
gray_fox
What a waste!
1438 / 1167 / 61
Регистрация: 21.04.2012
Сообщений: 2,436
Завершенные тесты: 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;
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 686
Записей в блоге: 1
05.08.2014, 07:59     Возожно ли создать массив указателей на шаблоны функций? #15
Uasya, вы как-то сумбурно написали, что хотите получить. Уж больно у всех ответы разные. Напишите пример кода, который должен работать, тогда мы вам и реализацию подскажем. Хрустального шара ни у кого нет. У кого есть - на форуме не сидит, на Porshe Cayenne ездит.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2014, 14:23     Возожно ли создать массив указателей на шаблоны функций?
Еще ссылки по теме:
опп класс и массив (создать массив указателей по выборке животных, участвующих в забеге) C++
Создать динамический массив указателей C++
Возможно ли создать массив указателей на перечисления? C++
Создать дополнительный массив указателей на строки матрицы C++
C++ Создать массив заданной размерности с помощью функции и указателей

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

Или воспользуйтесь поиском по форуму:
Uasya
0 / 0 / 0
Регистрация: 26.06.2014
Сообщений: 14
11.08.2014, 14:23  [ТС]     Возожно ли создать массив указателей на шаблоны функций? #16
CyberSolver я предполагал, что выглядеть это должно как-то так

Кликните здесь для просмотра всего текста
functions. h
C++ (Qt)
1
2
3
#include <что-то , что содержит объявление my_type>
void func_0(my_type** arr)
void func_1(my_type** arr)
functions.cpp
C++ (Qt)
1
2
void func_0(my_type** arr){...}
void func_1(my_type** arr){...}
my_thread.h
C++ (Qt)
1
2
3
4
5
QLibrary lib;
 
template <class my_type> void func_a(my_type** arr);
typedef void (*Func)(my_type** arr);
Func arr_of_func[10];

my_thread.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void my_thread::run()
{
     arr_of_func[0] = func_0;
     arr_of_func[1] = func_1;
     
     // здесь главная проблема (см. ниже)
     arr_of_func[2] = (Func)(lib.resolve("func_2"));
 
     forever
     {
          if(flag_vyzov_func == 1)
          {
               arr_of_func[indks_of_func](arr)
          }
     }
}


а проблема в следующем: func_2 нужно подгрузить из dll, но если func_0 и func_1 - шаблоны функций, указатели на которые нужно запихнуть в arr_of_func, то как в этот массив запихнуть указатель на шаблон функии из dll.
arr - это указатель на элемент массива, куда положила данные предыдущая вызваная функция.
А можетбыть все это можно как-то проще организовать?
P.S что хотелось видеть в итоге :есть сколько-то функций, каждая из которых принимает двумерный массив (одна получает int, другая float и тд) и выплевывает также двумерный (так же разных типов); какие-то функции нужно подгружать из dll. Так вот хочется, чтобы в какой угодно последовательности можно было б вызывать эти самые функции (т.е чтобы можно было б пустить выходные данные одной на вход другой).
Yandex
Объявления
11.08.2014, 14:23     Возожно ли создать массив указателей на шаблоны функций?
Ответ Создать тему
Опции темы

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