Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2014, 18:23   #1
anakinskyoker
Пользователь
 
Регистрация: 18.06.2014
Сообщений: 15
По умолчанию Управляемая библиотека (managed dll): загвоздка с (универсальным типом) generic typename

Здравствуйте. Имеется заголовочный h.-файл с C++ кодом, реализующий решение систем нелинейных уравнений

В нем есть объявление функций и их реализация:

Объявление:
Код:
template <typename Func>
void fdjac1 ( Func fcn,
  int n, double x[], double fvec[], double fjac[], int ldfjac, int *iflag,
  int ml, int mu, double epsfcn, double wa1[], double wa2[] );
Реализация:
Код:
void fdjac1 ( void fcn ( int n, double x[], double f[], int *iflag ),
  int n, double x[], double fvec[], double fjac[], int ldfjac, int *iflag,
  int ml, int mu, double epsfcn, double wa1[], double wa2[] )
 
{
  //всякая всячина
  
}
Я задался целью, сделать управляемую библиотеку, чтобы использовать ее в будущем в моих .Net проектах.
Возник вопрос как правильно сделать аналогично объявление и реализацию в managed dll конструкции выше.
Не понятно, как обращаться с generic типом template <typename Func> где Func у меня везде будет:
void fcn ( int n, double x[], double f[], int *iflag )

Выложил архив с проектом в папке ManagedAssemblies и изначальный заголовочный файл lib.txt
Вложения
Тип файла: rar ManagedAssemblies.rar (48.8 Кб, 6 просмотров)
anakinskyoker вне форума Ответить с цитированием
Старый 18.07.2014, 19:08   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

А если функция всегда одного и того же типа, зачем тогда шаблон нужен?
Вполне можно сделать указатель на функцию.
waleri вне форума Ответить с цитированием
Старый 18.07.2014, 19:25   #3
anakinskyoker
Пользователь
 
Регистрация: 18.06.2014
Сообщений: 15
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
А если функция всегда одного и того же типа, зачем тогда шаблон нужен?
Вполне можно сделать указатель на функцию.
Я думаю вы правы, просто так уж было реализовано в изначальной библиотечке, и я думал от греха менять ничего не буду пока, пусть бы заработала как есть. Вам спасибо за ответ, но можно немножечко по-подробней как бы вы с указателем реализовали.
anakinskyoker вне форума Ответить с цитированием
Старый 18.07.2014, 20:28   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Мне казалось, что перенести без шаблонов будет легче.

Код:
typedef void (*Func) ( int n, double x[], double f[], int *iflag );

void fdjac1 ( Func fcn,
int n, double x[], double fvec[], double fjac[], int ldfjac, int *iflag,
int ml, int mu, double epsfcn, double wa1[], double wa2[] )
{
// Тут все остается как есть
}
waleri вне форума Ответить с цитированием
Старый 19.07.2014, 04:15   #5
anakinskyoker
Пользователь
 
Регистрация: 18.06.2014
Сообщений: 15
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Мне казалось, что перенести без шаблонов будет легче.

Код:
typedef void (*Func) ( int n, double x[], double f[], int *iflag );

void fdjac1 ( Func fcn,
int n, double x[], double fvec[], double fjac[], int ldfjac, int *iflag,
int ml, int mu, double epsfcn, double wa1[], double wa2[] )
{
// Тут все остается как есть
}
Спасибо, попробовал сделать как Вы подсказали, библиотека компилится, но когда подключаю к другим проектам через Add reference и просматриваю dll-ку в обозревателе объектов именно этот метод с указателем отсутствует, что это может быть?
anakinskyoker вне форума Ответить с цитированием
Старый 19.07.2014, 07:31   #6
anakinskyoker
Пользователь
 
Регистрация: 18.06.2014
Сообщений: 15
По умолчанию

Цитата:
Сообщение от anakinskyoker Посмотреть сообщение
Спасибо, попробовал сделать как Вы подсказали, библиотека компилится, но когда подключаю к другим проектам через Add reference и просматриваю dll-ку в обозревателе объектов именно этот метод с указателем отсутствует, что это может быть?
Только что узнал такое
Цитата:
Typedefs are not exposable in metadata for Net projects. You can use them inside the assembly, but not outside.
Теперь получается надо как-то по-другому реализовать вставку функции fcn
anakinskyoker вне форума Ответить с цитированием
Старый 19.07.2014, 07:34   #7
anakinskyoker
Пользователь
 
Регистрация: 18.06.2014
Сообщений: 15
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Мне казалось, что перенести без шаблонов будет легче.

Код:
typedef void (*Func) ( int n, double x[], double f[], int *iflag );

void fdjac1 ( Func fcn,
int n, double x[], double fvec[], double fjac[], int ldfjac, int *iflag,
int ml, int mu, double epsfcn, double wa1[], double wa2[] )
{
// Тут все остается как есть
}
Есть идеи как по-другому реализовать функциональный тип, чтобы метадата не терялась при переносе в другие проекты?
anakinskyoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Dll библиотека C# Nickolai47 Фриланс 3 03.07.2013 23:35
элемент управления с универсальным типом WizarD.89 C# (си шарп) 5 12.04.2013 16:04
библиотека DLL Federal Помощь студентам 17 05.08.2010 15:23
DLL-библиотека Lisёноk Помощь студентам 2 29.04.2010 22:00
DLL библиотека Владимир1988 Помощь студентам 1 17.11.2009 17:15