Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Приведение к заранее неизвестному типу 
:(
    Опции темы
vilia
Дата 18.11.2006, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 18.11.2006

Репутация: нет
Всего: нет



Помогите, пожалуйста!. Нужно написать функцию с заранее неизвестным количеством аргументов. Типы аргументов заранее неизвестны(как в printf). Но это не самое сложное. Заранее неизвестны даже те типы аргументов, которые могут быть в функции, поэтому методика как в том же printf'e не пройдет.(там строка в которой перечислены типы ожидаемых переменных) В то же время мне нужно привести аргументы функции к их собственному типу. То есть чтобы функция которая получает два аргумента типов вектор и матрица(и возможно какие-то допюуказания о типах) могла понять то что это именно вектор и матрица, а не, скажем два числа типа float, - и применять к ним некие операции.
PM MAIL   Вверх
MAKCim
Дата 18.11.2006, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

Но это не самое сложное. Заранее неизвестны даже те типы аргументов, которые могут быть в функции,

понимаешь, если ничего не известно, как можно что-то определить


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
vilia
Дата 18.11.2006, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 18.11.2006

Репутация: нет
Всего: нет



Прошу прощения. Я неверно объяснил. В функцию передаются параметры и, возможно, какая-то информация специфицирующая тип к которому нужно привести аргументы. Далее мне нужно эту информацию расшифровать и сделать присваивание type a=va_arg(ap,type); no я не могу в функции написать 
Код

if(указан тип вектор) vector v=va_arg(ap,vector);
else if(указан тип float) float f=va_arg(ap,float);
...
 Просто возможно будут добавлены новые классы которые будут являтся аргументами некоторой функции.
А вообще суть проблемы. Мне нужно написать класс функций(в математическом смысле). Класс должен содержать указатель на функцию которая вычисляет значение по данным аргументам. Кроме того для построения скажем производной функции необходимо создать объект этого же класса тоже с указателем на функцию определенных типов аргументов.
Я посмотрел как реализована функция va_arg. Фактически, это параметризированный define в котором тип подставляется в программу как текст. А можно ли подобную концепцию реализовать для функций-членов - то есть создавать "define-члены"? Или хранить, например, в массиве неким образом названия типов и преобразовывать тип к неообходимому.
Вот еще один вопрос могу ли я написать функцию содержащую в себе какое-то заранее неизвестное define-выражение и потребовать от пользователя чтобы он его определял перед вызовом функции. Скажем, так 
Код

#ifdef TYPE
void *func(...){ ...
TYPE a=va_arg(ap,TYPE); // ap - просто указатель на аргумент из списка
...
}
#endif

PM MAIL   Вверх
bsa
Дата 19.11.2006, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Есть несколько вариантов, например можно использовать шаблоны. А можно делать аналогично функции printf.
PM   Вверх
MAKCim
Дата 19.11.2006, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

Вот еще один вопрос могу ли я написать функцию содержащую в себе какое-то заранее неизвестное define-выражение и потребовать от пользователя чтобы он его определял перед вызовом функции. Скажем, так 
Код

#ifdef TYPE
void *func(...){ ...
TYPE a=va_arg(ap,TYPE); // ap - просто указатель на аргумент из списка
...
}
#endif


шаблоны?
Код

template<class T> void* func() {
...
T a = va_arg(ap, T);
}




--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.3692 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.