Sukerbek Ответов: 1

Получить размер qlist как размер структуры C++


Здравствуйте, как я могу получить размер моего собственного списка, например sizeof struct. Например, я знаю, как работает sizeof.
enum NETCDF_Type
	{
		NETCDF_NONE,      //!< unknown data foramt
		NETCDF_STRING,  
		NETCDF_UCHAR,		//!< signed 1 byte integer
		NETCDF_CHAR,		//!< signed 1 byte integer
		NETCDF_SHORT, 	//!< signed 2 byte integer
		NETCDF_INT,		//!< signed 4 byte integer
		NETCDF_USHORT,	//!< unsigned 2-byte int
		NETCDF_UINT,		//!< unsigned 4-byte int
		NETCDF_FLOAT32,	//!< signed 4-byte int
		NETCDF_DOUBLE64,	//!< signed 8-byte int
		NETCDF_LONGLONG,
		NETCDF_ULONGLONG
	};

void getSize( const QList< NETCDF_Type > myList )
{
     for( int i = 0; i < myList.count(); i++ )
     {
          //do something
          //I need a size of which NETCDF_Type i am using.
          //Without sizeof();
     }
}


Что я уже пробовал:

struct MyStruct
{
     char v1;
     char v2;
     char v3;
     short v4;
};

int mSize = sizeof( MyStruct ); mSize => 6;

struct MyStruct
{
     char v1;
     char v2;
     char v3;
     char v4;
     short v;
};


int mSize = sizeof( MyStruct ); mSize => 6;

Jochen Arndt

Вы должны прояснить свой вопрос. Со списками обычно бывает два размера:
- Размер каждого элемента
- Количество элементов, фактически хранящихся в списке

Первый определяется типом элемента, а второй управляется списком (хранящимся в переменной-члене). Реализация списка обычно имеет функцию для доступа к переменной-члену, которая часто называется GetCount().

Большинство списков отслеживают также распределение в отдельной переменной. Но это представляет интерес только тогда, когда имеет значение использование памяти / производительность.

Sukerbek

Большое вам спасибо , я обновил свой вопрос, взгляните, пожалуйста.

Jochen Arndt

Это все еще неясно, потому что мы не знаем, какой размер вы хотите и почему вы не можете использовать sizeof().

Все, что Вы нам показали, - это перечисление. Это всего лишь int. Если вам нужен размер данных, которые описываются перечислением, вы должны показать нам соответствующие определения данных.

Для всех типов, кроме NETCDF_STRING, sizeof() будет выполнять эту работу:
NETCDF_LONGLONG : sizeof(long long)

Если вам нужны независимые от платформы размеры, вы должны использовать типы данных с фиксированной шириной, такие как int32_t вместо int.

Sukerbek

Большое вам спасибо, я решил свою проблему другим способом.

1 Ответов

Рейтинг:
6

CPallini

Это зависит от ваших требований, но короткий ответ заключается в том, что вы не можете: QList<T> это не так POD и, более того, вы не имеете доступа к деталям его реализации. Вы можете получить экстимат использования памяти, умножив размер каждого элемента на размер списка, т. е. sizeof(T) * myqlist.size().


[обновление]

Цитата:
//Мне нужен размер, который я использую NETCDF_Type.
//Без sizeof();
Я бы написал метод для этого, например
size_t getSize(NETCDF_Type typ);

Реализация метода зависит от вас, в простом подходе используйте switch.
[/обновление]


Sukerbek

Большое вам спасибо , я обновил свой вопрос, взгляните, пожалуйста.

Sukerbek

Большое вам спасибо, я решил свою проблему другим способом.