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

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

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

Шаблонные функции и классы - C++

05.05.2013, 13:16. Просмотров 310. Ответов 1
Метки нет (Все метки)

Добрый день.
У меня возникли проблемки при использование шаблонных функций. Вот код
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
77
78
79
80
81
class LineTable{
    private:
     AnsiString lname;
     AnsiString ltype;
     vector<int> lvalue;
     vector<float> flvalue;
     vector<double> dlvalue;
     vector<AnsiString> alvalue;
    public:
     LineTable():lname(""),ltype("")
     {}
     LineTable(AnsiString name,AnsiString type):lname(name),ltype(type)
     {}
     ~LineTable(){}
 
     AnsiString get_name()
     {return lname;}
     AnsiString get_type()
     {return ltype;}
 
     template<class CFun>
     CFun get_value(int i)
     {
      if(ltype=="int")
       return lvalue[i];
      if(ltype=="float")
       return flvalue[i];
      if(ltype=="double")
       return dlvalue[i];
      if(ltype=="AnsiString")
       return alvalue[i];
     }
 
     int get_count()
     {
      if(ltype=="int")
       return lvalue.size();
      if(ltype=="float")
       return flvalue.size();
      if(ltype=="double")
       return dlvalue.size();
      if(ltype=="AnsiString")
       return alvalue.size();
     }
 
     template<class CFun>
     void record_value(CFun a)
     {
      if(ltype=="int")
       lvalue.push_back(a);
      if(ltype=="float")
       flvalue.push_back(a);
      if(ltype=="double")
       dlvalue.push_back(a);
      if(ltype=="double")
       alvalue.push_back(a);
     }
};
 
class Table{
    private:
     AnsiString tname;
     AnsiString tdescription;
 
    public:
    vector<LineTable> theLineTable;
 
     Table():tname(""),tdescription("")
     {}
     Table(AnsiString name,AnsiString des):tname(name),tdescription(des)
     {}
     ~Table(){}
 
     AnsiString get_name()
     {return tname;}
     AnsiString get_description()
     {return tdescription;}
     int get_count()
     {return theLineTable.size();}
 
};
У меня есть класс Table хранящий вектор объектов LineTable. В LineTable хранится вектор lvalue и все подобные ему ,отличающиеся типом данных. Объект Table -это таблица, которая хранит строки LineTable и каждая строка может хранить разные типы данных,т.е. одна строка -один тип. Как сделать шаблон класса ,чтобы можно было обойтись одним вектором в определение LineTable, конечно если это возможно ? Если нет, то вопрос будет следующим как сделать шаблон фукнции get_value()? Загвоздка последнего вопроса заключается в том что он не хочет работать с типом AnsiString. Пишет что не возможно конвертировать AnsiString в int,float,double, а если убрать этот тип ,то все работает , но в программе он мне нужен. Вроде все рассказал. Буду благодарен за любую помощь. Жду предложений.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2013, 13:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблонные функции и классы (C++):

Шаблонные классы - C++
Добрый день! Вопрос такой: есть класс class A { public: int x; A* z; } Мне нужно сделать его шаблонным, а...

Шаблонные классы - C++
Помогите разобраться с шаблонными классами template &lt;class Type&gt; class CL1 { }; class CL2 { }; int main(void) {

Шаблонные классы - C++
Есть задание, на скрине ниже Помогите, как инициализировать объект PairArray в конструкторе класса Wine?(Wine.cpp) Pair.h ...

Шаблонные классы - C++
Как сделать вот такой класс шаблонным? #ifndef CVECTOR_H #define CVECTOR_H #include &lt;iostream&gt; using namespace std; typedef...

Шаблонные классы и оптимизация - C++
Насколько в С++ проработана оптимизация шаблоннов? Действительно ли на каждый инстант шаблона функции создается свою функция? Вот,...

Шаблонные дружественные классы - C++
Походу с шаблоном разбираюсь, Node* стала приватным в моем классе-итераторе. #include &lt;iostream&gt; template&lt;class T&gt; class iterator; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
05.05.2013, 13:32 #2
boost::variant
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2013, 13:32
Привет! Вот еще темы с ответами:

Шаблонные классы: найти и исправить ошибки в коде - C++
Разбираюсь тут с шаблонами, вроде сделал все как в работающей программе, но не компилируется #include &quot;stdafx.h&quot; #include &quot;stdio.h&quot; ...

Шаблонные классы. Присвоение к указателю и приведение типов - C++
Добрый вечер, ув. форум, есть к вам вопрос. Есть род. абстрактный класс: ParentAbstact Есть два наследника: ChildOne : public...

Сложить массивы почленно (используются шаблонные классы) - C++
Приветствую. Почему-то ни в одной моей теме ответа так и не наблюдается за последнее время. Надеюсь, поможете. Есть у нас лаба с таким...

Шаблонные функции - C++
Помогите, пожалуйста, реализовать шаблонную функцию определения, есть ли число в массиве


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

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

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