Официальный сайт студ.городка НГТУ
Программирование и БД » [C++] шаблоны 

#1  26.01.11 02:33

[C++] шаблоны

возник такой вопрос. например есть такой шаблон:

template <typename T>
class CSomeClass
{
public:
        CSomeClass(void);
    static int get_counter() { return counter; };    // получаем количество объектов класса
private:
    static int counter;            // счетчик объектов класса
// ну и другие методы и т.д.
};

template <typename T>
CSomeClass<T>::CSomeClass(void)
{ ++counter; };

template <typename T>
int CSomeClass<T>::counter = 0;


так вот, сколько бы я объектов не создавал, вызываю функцию get_counter() она упорно выдает ноль.
в чем ошибка?

и кстати тут же еще вопрос:
если я хочу объекты этого шаблона, причем с разными типа (ну там например double и wchar_t) хранить в ОДНОМ контейнере например vector, как это сделать?
как бы такое не канает же std::vector<CSomeClass<а вот тут надо написать какой тип!!!>  >?
можно как нибудь извернуться?
через void* можно как-нибудь и собственно тут же вопрос, вообще что значит эта запись void*, можно объяснить популярно? прочитал что разыменование, но что означает конкретно так и не понял...

Исправлено Flinn (26.01.11 03:06)

Offline

#2  26.01.11 11:47

Re: [C++] шаблоны

шаблоны не решают твоей задачи "хранить в одном контейнере объекты разных типов"...
шаблоны предназначены как раз для реализации АТД для любого типа... т.е. ты например описываешь шаблон Vector<T>, который тебе позволяет создать вектор из int или вектор из double, но никак не вектор из разничных типов...

Offline

#3  26.01.11 11:51

Re: [C++] шаблоны

а как это вообще применимо? ну, т.е. для чего может понадобиться контейнер для различных типов? прям свалка какая-то... может тебе стоит пересмотреть архитектуру, раз к тому приходишь?

Offline

#4  26.01.11 12:01

Re: [C++] шаблоны

У меня есть шаблон для матриц различных типов. Так вот, допустим есть несколько объектов этого шаблона ну там парочка  double'овских, и парочки int'овских. Вот интересовал вопрос, можно ли все это положить в один контейнер.
а по первому вопросу есть ответ? про static

Offline

#5  26.01.11 13:52

Re: [C++] шаблоны

ты не понимаешь назначения шаблонов... объекты не могут быть объектами шаблона... они являются объектами класса, с некоторыми изменяемыми частями, в зависимости от указанного типа... т.е. шаблоны придуманы для того, чтобы ты не писал 5 классов для хранения и обработки 5 различных типов данных, а мог это все объединить в виде шаблонного класса... не более того...

на счет статической переменной класса... накидай прям простой пример и покажи как ты это все пытаешь использовать... а то приходится додумывать... т.е. причина может крыться не только в описании... лично для мне запись

Код: cpp:

template <typename T>
int CSomeClass<T>::counter = 0;

очень не очевидна... и куда ты такую запись пихаешь в своем проекте?

привильней наверное писать перед функцией main() что-то типа:

Код: cpp:

int CSomeClass<int>::counter = 0;
int CSomeClass<double>::counter = 0;

т.е. для объектов с различными типами инициировать статический счетчик у конкретного класса
но и это вроде как можно реализовать в конструкторе класса (выделение памяти, задание начального значения), и не забыть в деструкторе при 0 высвобождать память

Исправлено Jaguar (26.01.11 14:00)

Offline

#6  26.01.11 14:02

Re: [C++] шаблоны

Flinn написал(а):

У меня есть шаблон для матриц различных типов.

кстати... это все же различные матрицы каждого типа, а не одна матрица с объектами разных типов

Offline

#7  26.01.11 16:05

Re: [C++] шаблоны

Я понимаю что такое шаблон и что такое класс.
вопрос был в том, можно ли в std::vector<CSomeClass<а вот тут надо написать какой тип!!!>  > хранить шаблон с параметром <int> и одновременно с параметром <double>. Теперь понял что нет.
На сколько я понимаю можно делать только так:
std::vector<CSomeClass<int>  > для int'ов и
std::vector<CSomeClass<double>  > для double'ов. Верно?
Со статической переменной попробую как ты написал.

Offline

#8  26.01.11 16:13

Re: [C++] шаблоны

попробовал. Спс, сделал получилось. Кому если интересно вот так:
int CDynamicMatrix<int>::counter = 0;
int CDynamicMatrix<float>::counter = 0;
int CDynamicMatrix<double>::counter = 0;
int CDynamicMatrix<char>::counter = 0;
int CDynamicMatrix<wchar_t>::counter = 0;

для разных типов инициализировал свой счетчик.

ну и потом вызываю вот так:
CDynamicMatrix<double>::get_counter()
CDynamicMatrix<int>::get_counter()

то есть,Jaguar, я правильно понимаю, для каждого типа шаблона инициализировал свой счетчик, а потом для типов double и int вызвал функцию get_counter(). Верно?

Offline

#9  26.01.11 20:34

Re: [C++] шаблоны

Flinn написал(а):

я правильно понимаю, для каждого типа шаблона инициализировал свой счетчик

да

потом создаешь необходимое кол-во объектов и проверяешь счетчик

Flinn написал(а):

а потом для типов double и int вызвал функцию get_counter()

Offline

#10  26.01.11 20:38

Re: [C++] шаблоны

Flinn написал(а):

вопрос был в том, можно ли в std::vector<CSomeClass<а вот тут надо написать какой тип!!!>  > хранить шаблон с параметром <int> и одновременно с параметром <double>

нет, как я и писал выше... АТД vector из STL описан таким же шаблонным классом... следовательно не может содержать элементы разных типов.... ну, а тип элементов вектора может быть любым... даже свом (даже если реализован в виде шаблонного класса)

Offline

#11  26.01.11 20:39

Re: [C++] шаблоны

ясно. спасибо.

а можно еще прояснить что такое константность функции класса?
то есть запись такая вроде

void someClass::someFunction (const someClass_2& par1, const someClass_3& par2) const

интересует именно последний const

Offline

#12  26.01.11 20:55

Re: [C++] шаблоны

void someClass::someFunction (const someClass_2& par1, const someClass_3& par2) const
это означает что данный метод можно вызывать только у константного объекта

Offline

#13  27.01.11 02:38

Re: [C++] шаблоны

Flinn, Александр, чем вы занимаетесь? Это что, бака?

Offline

#14  27.01.11 02:50

Re: [C++] шаблоны

нет. кое-что похожее.

Offline

#15  27.01.11 08:40

Re: [C++] шаблоны

о семантике языка книги почитать надобно

Offline

#16  27.01.11 09:37

Re: [C++] шаблоны

Matrim, ну, Романенко Т.А. тож неплохо объясняет шаблонные классы и АТД

Offline

#17  28.01.11 21:21

Re: [C++] шаблоны

Flinn, ты к Чернешову подойди, он любит эти шаблоны, мб посоветует че почитать.

Offline

Программирование и БД » [C++] шаблоны 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.044 сек.
Выполнено 14 запросов.