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

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

Войти
Регистрация
Восстановить пароль
 
Andsteadur
153 / 137 / 3
Регистрация: 23.05.2009
Сообщений: 275
#1

Шаблонный метод класса - C++

27.02.2012, 14:28. Просмотров 928. Ответов 1
Метки нет (Все метки)

Имеется следующая ситуация:
C++
1
2
3
4
template <class T> class Array : public std::deque<boost::shared_ptr<T> >
{
public:
};
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
class Class1
{
public:
int getID();
....
private:
int _id;
...
};
 
typedef Array<Class1> Class1Array;
 
class Class2
{
int getID();
....
private:
int _id;
...
};
 
typedef Array<Class2> Class2Array;
 
class Class3
{
private:
shared_ptr<Class1Array> _class1;
shared_ptr<Class2Array> _class2;
};
В ходе работы требуется получить индексы объектов в Array по идентификаторам объектов. Можно сделать было бы так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    int Class3::getClass1ArrayIndexByID(const int& id)
    {
        FTRACE1(id)
 
        for (unsigned int i = 0; i < _class1->size(); i++)
        {
            if ((*_class1)[i]->getId() == id)
                return i;
        }
        return -1; //not found
    }
 
    int Class3::getClass2ArrayIndexByID(const int& id)
    {
        FTRACE1(id)
 
        for (unsigned int i = 0; i < _class2->size(); i++)
        {
            if ((*_class2)[i]->getId() == id)
                return i;
        }
        return -1; //not found
    }
НО! Для каждого объекта класса( на подобие Class1Array, Class2Array ) приходится писать собственный метод. Как бы мне сделать общий метод для получения индекса?

Пробовал нечто такое:
C++
1
2
3
4
5
6
7
8
9
10
11
12
    template <class T>
    int getArrayIndexByID(Array<T>* arr, const int& id)
    {
        FTRACE1(id)
 
        for (unsigned int i = 0; i <arr->size(); i++)
        {
            if ((*arr)[i]->getId() == id)
                return i;
        }
        return -1; //not found
    }
Но при вызове
C++
1
getArrayIndexById(Class1Array.get(), 1);
Получаю ошибку 'initializing' : cannot convert from 'void' to 'int'

Господа хорошие подскажите почему такая ошибка и как должен выглядеть метод?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2012, 14:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблонный метод класса (C++):

Чем отличается шаблонный метод класса от шаблонного класса? - C++
Чем отличается шаблонный метод класса от шаблонного класса???????ПЛИЗ!!!!Если можно немного ссылок на летературу

Шаблонный метод шаблонного класса - C++
template &lt;class T1&gt; class A{ public: A(){}; void f(); }; template &lt;class T1,class T2&gt; void A&lt;T1&gt;::f(){}

Создать шаблонный класс и наследованный от этого класса метод - C++
Создать шаблонный класс и наследованный от этого класса метод(естественно шаблонный), реализовать его в int main(){} через INT и Double.

Как передать в метод класса Menu указатель на метод дочернего класса? - C++
Как передать в метод базового класса указатель на метод дочернего: class Menu() { protected: setCallback(*********); //...

Шаблонный массив объектов класса - C++
Есть такая программа: #include &lt;iostream&gt; class TMatrixClass { private: int X, Y; int **Matrix;

Заполнить шаблонный член у класса - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; #include &lt;windows.h&gt; using namespace std; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Luke
39 / 39 / 1
Регистрация: 21.02.2012
Сообщений: 95
27.02.2012, 15:45 #2
Class1Array.get() - какое значение возвращает?


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template <class T>
     int getArrayIndexByID(T arr, const int& id)//мне думается что не надо подавать массив 
//специфицированный типом Т
//тип Т уже и будет эквивалентен _class1,_class2 и т.д.
        {
                FTRACE1(id)
 
                for (unsigned int i = 0; i <arr->size(); i++)
                {
                        if ((*arr)->getId() == id)
                                return i;
                }
                return -1; //not found
        }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2012, 15:45
Привет! Вот еще темы с ответами:

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

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

шаблонный метод в статической библиотеке - C++
подскажите, имеется след. архитектура кода: myclass.h class myclass { public: template&lt;class T&gt; void...

Шаблонный класс от шаблонного класса, ругается компоновщик - C++
абстрактный класс Хэширования template &lt;class typeHashData, class typeHashIndex&gt; class AbstarctHash { private: public: ...


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

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

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