BG Development


  Reply to this topicStart new topicStart Poll

> статични членове в шаблон?, templates
my_shadow
Публикувано на: 30-05-2020, 23:47
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 605
Регистриран на: 07.09.07



Опитвам се да разбера шаблоните. Видях, че инстанция на долното заема 24B, ако последните два члена са просто променливи. Но ако са статични константи обектите заемат 16B.

1/ - Така ли се декларира? (компилатора създава бинарка, без да мрънка)
2/ - Зашо не мога да декларирам константата като static както го правех в С?

Всичко е в примерче в един .cc файл. Компилатора е c++ (Ubuntu 9.3.0-10ubuntu2) 9.3.0
Публикувам само декларацията, защото нямам имплементация. Разбрах защо шаблона + описанието му седи само в хедъра.

CODE

template <class T>
class Array {
public:
   Array();
   Array(const Array& src);
   ~Array();
   
   Array& operator=(const Array& rht);
   Array& operator[](int idx);
   
   int size() const; //
   int capacity() const; //
   
   void add(const T& elem);
   void insert(const T& elem, int idx);
   void remove(int idx);

private:
   T* m_data;
   int m_size;
   int m_capacity;
   static const int m_INIT_SZ;
   float static const m_GROW;
};

template <class T>
const int Array<T>::m_INIT_SZ = 2;

template <class T>
const float Array<T>::m_GROW = 1.5;


Това мнение е било редактирано от my_shadow на 31-05-2020, 00:10
PMEmail Poster
Top
FidelDahan
Публикувано на: 31-05-2020, 09:38
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2421
Регистриран на: 12.06.08



Статичните член-полета в runtime ги има само веднъж за всички инстанции(обекти) на класа. Не-статичните полета се създават за всеки обект по веднъж.

За това при първия ти вариант обектите са по-малки, защото статичната информация не се запаметява в обекта, а в компилирания клас и така може да се чете от всеки обект. И тъй като става въпрос за обикновени константи, е напълно ок те да бъдат статични и да ги има само веднъж статично в класа. Ако не бяха static, всеки обект вътре в него си щеше да съдържа по един const int m_INIT_SZ, но всичките щяха да имат една и съща стойност.
PMEmail Poster
Top
my_shadow
Публикувано на: 02-06-2020, 09:42
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 605
Регистриран на: 07.09.07



Стоплих чайника....разбрах за статиците в Цъ+
Благодаря!

Това мнение е било редактирано от my_shadow на 02-06-2020, 09:43
PMEmail Poster
Top
0 потребители преглеждат тази тема в момента (0 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0