строки и я хочу получить его размер просто вызвав метод 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
Или же эта задача решается просто обычным сишным методом, где мы просто работаем с сайзофами?
А зачем 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) На будущее: шаблоны следует определять прямо в хедере, так как для их инстанцирования нужно полное определение.
4) вообще-то к шаблонам функции это не очень относится
Ну как же... Вот у нас есть либа и экзешник В либе в хедере объявлен шаблон функции, а его определение - в цпп. Экзешник юзает хедер и эту функцию. Как она инстанцироваться должна без видимого определения в экзешнике? Очевидно, в либу не зашита реализация для всех возможных шаблонных параметров. Вот тут линкер начнет сыпать ошибки.
она может быть инстанцирована либой
Спасибо за пометки, лучше бы вопрос по-хорошему наверное уметь составлять чего я хочу.
Обсуждают сегодня