Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1

Шаблон функции и разные типы данных

24.09.2014, 17:57. Показов 3142. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как определить переменная какого типа была передана в шаблон функцию ?

Например: int или wchar_t*
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.09.2014, 17:57
Ответы с готовыми решениями:

Как не писать один и тот же код, для функции, принимающей разные типы данных в качестве аргумента
Проблема такая: есть некая функция. Внутри нее происходят одни и теже вычисления, вне зависимости от типа входных данных. void...

Разные типы данных
Нужно выполнить простое вычитание одного слагаемого из другого. Проблема в том, что первое задано как массив из 1 столбца и 6 строк, а...

Размер указателя на разные типы данных
еще один вопрос к етой теме почуму придавая указателю * prt тип short int или double функция sizeof так же выводит 4 как при int?

10
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
24.09.2014, 18:13
Зачем это? Шаблон он на то и шаблон, что ему по фиг должно быть, какого типа данные были переданы. А вот если тебе надо для определенных типов делать спец. обработку - явная специализация шаблона в помощь.
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
25.09.2014, 15:09  [ТС]
VarType(переменная) == Variant Type
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
25.09.2014, 15:20
Вопрос остается прежним, ты на него не ответил.
Пока ты идешь вот к этому...
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.09.2014, 15:23
Шаблон средство обобщения, что общего между int и wchar_t* в твоем случае непонятно.
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
25.09.2014, 15:52  [ТС]
Согласен, что лажа получается, а не обобщение.

Добавлено через 2 минуты
шаблон в моём случае не подходит.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.09.2014, 15:59
Используй variant-ы или наследование.
1
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
25.09.2014, 16:02  [ТС]
Да, уже смотрел. Код меняется всё равно при разных типах. Нет однообразной обработки разных типов в моём случае.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.09.2014, 16:17
Ну тогда только обычная перегрузка ф-ции.
0
19 / 19 / 4
Регистрация: 27.05.2013
Сообщений: 119
26.09.2014, 20:18
Цитата Сообщение от Kabak Посмотреть сообщение
Как определить переменная какого типа была передана в шаблон функцию ?
Например: int или wchar_t*
Вообще то можно. Но согласен со всеми кто говорит что это криво с точки зрения шаблона. Смысл не явной передачи int и wchar_t в шаблон мне не понятен, а в общем случае можно сделать так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#pragma hdrstop
#pragma argsused
 
#include <tchar.h>
#include <stdio.h>
 
#include <typeinfo> // For std::bad_cast
#include <iostream> // For std::cout, std::err, std::endl etc.
 
#include <conio.h>
 
 
 
 
class A {
public:
    // Since RTTI is included in the virtual method table there should be at least one virtual function.
    virtual ~A() { };
    void methodSpecificToA() { std::cout << "Method specific for A was invoked" << std::endl; };
};
 
class B : public A {
public:
    void methodSpecificToB() { std::cout << "Method specific for B was invoked" << std::endl; };
    virtual ~B() { };
};
 
class C : public A {
public:
    void methodSpecificToB() { std::cout << "Method specific for C was invoked" << std::endl; };
    virtual ~C() { };
};
 
void my_function(A& my_a)
{
    try
    {
        B& my_b = dynamic_cast<B&>(my_a); // cast will be successful only for B type objects.
        my_b.methodSpecificToB();
    }
    catch (const std::bad_cast& e)
    {
        std::cerr << "  Exception " << e.what() << " thrown." << std::endl;
        std::cerr << "  Object is not of type B" << std::endl;
    }
}
 
template< typename T >
void sort( T& cl_test )
{
 
  my_function(cl_test);
 
}
 
 
 
int main()
{
   
 
    A *arrayOfA[3];          // Array of pointers to base class (A)
    arrayOfA[0] = new B();   // Pointer to B object
    arrayOfA[1] = new C();   // Pointer to C object
    arrayOfA[2] = new A();   // Pointer to A object
 
    for (int i = 0; i < 3; i++)
    {
        sort(*arrayOfA[i]);
        delete arrayOfA[i];  // delete object to prevent memory leak
    }
 
 
  getch();
 
}
или я вообще не про то говорю?

пример слегка переработан отсюда
https://en.wikipedia.org/wiki/Dynamic_cast
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
26.09.2014, 20:39
Цитата Сообщение от Olex Посмотреть сообщение
или я вообще не про то говорю?
Понять это можно, ответив на вопрос: получится ли при озвученном тобою подходе понять, что прилетело в шаблон - int или wchar_t*?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.09.2014, 20:39
Помогаю со студенческими работами здесь

Интеграция MatLab в C#: разные типы данных
в матлабе реализовал генерацию простого числа, и воспользовался этим в шарпе с помощью следующего кода functionClass obj_fun = new...

Разные типы данных в одном поле
Предположим, что мне нужно хранить информацию о человеке в одной таблице. Таблица из двух колонок: характеристика и ее значение. ...

Контейнер, наследование и разные типы данных
День добрый. Вопрос собственно не один а три. Но основной один. Как удрать if'ы на участре кода №1. Так же приму советы по...

Разные типы денежных данных в одном поле
Помогите, плиз, не могу сам разобраться. Полазил по инету и не нашел ответа. Есть база с учетом поступлений от разных людей и каждый дает...

Цикл for, блок инициализации, разные типы данных
Речь пойдет про один из блоков цикла for, который называется блоком инициализации for ( блок инициализации ; ; ) Очень часто мы...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru