170 похожих чатов

Как можно получить размер объекта класса? Условно, есть у меня класс

строки и я хочу получить его размер просто вызвав метод size() и получать размер.

Вот реализация из книги по с++17.

template <class T, std::size_t N>
constexpr std::size_t size(const T (&array)[N]) noexcept
{
return N;
}

Вписал её в свой класс :

str.hpp - https://pastebin.com/McbiyAb0
str.cpp - https://pastebin.com/JxB8edEb

Или же эта задача решается просто обычным сишным методом, где мы просто работаем с сайзофами?

7 ответов

7 просмотров

А зачем sizeof? Зачем этот шаблон ?если в классе есть поле str_size - разве не оно размер строки считать должно? Тогда метод size и должен это поле возвращать. Инициализировать его надо в к-торе , ну и менять соответственно когда строка меняться будет. Нет?

вы точно внимательно читали эту книжку?

Вы по ходу немного с понятиями путаетесь. 1) Размер объекта класса определяется так: CMyClass obj; sizeof(CMyClass) // так sizeof(obj); // или так 2) Вам же, судя по всему нужно размер строчки определить, а не всего объекта (так как размер объекта то у вас всегда будет один и тот же: 2 * sizeof(size_t) + sizeof(char*) + padding) Ну у вас в классе для того и заложена переменная str_size. В конструкторе её надо правильно инициализировать только. И менять по необходимости: str::str(const char* strBuff) : str_buff(strBuff) , str_size(strlen(strBuff)) { } (Очевидно, что тут бы еще проверки добавить на валидность указателя и т.д. Пример я привожу концептуальный) 3) А вот ваш украденый size - это совершенно о другом. Если внимательнее книжку почитаете, то это размер статического массива. int SomeInts[10]; assert(size(SomeInts) == 10) 4) На будущее: шаблоны следует определять прямо в хедере, так как для их инстанцирования нужно полное определение.

Georgy Firsov
Вы по ходу немного с понятиями путаетесь. 1) Разм...

4) вообще-то к шаблонам функции это не очень относится

Constantine Drozdov
4) вообще-то к шаблонам функции это не очень относ...

Ну как же... Вот у нас есть либа и экзешник В либе в хедере объявлен шаблон функции, а его определение - в цпп. Экзешник юзает хедер и эту функцию. Как она инстанцироваться должна без видимого определения в экзешнике? Очевидно, в либу не зашита реализация для всех возможных шаблонных параметров. Вот тут линкер начнет сыпать ошибки.

тахир-кулиев Автор вопроса
Georgy Firsov
Вы по ходу немного с понятиями путаетесь. 1) Разм...

Спасибо за пометки, лучше бы вопрос по-хорошему наверное уметь составлять чего я хочу.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта