std::string_view ( const char*, std::string_view )
или std::string_view ( const std::string&, const std::string& )
?git push
я не дочитал. ))git push --force
я и сам делал когда было нужно. git config core.fileMode false
. int
очень плохо подходит. Для этих целей в стандартной библиотеке есть тип size_t
[?].template< typename TValue >
class Array final
{
private:
TValue* m_memory = nullptr;
size_t m_length = 0;
};
default
там где это можно.public:
inline Array() = default;
inline ~Array() { delete[] m_memory; };
explicit inline Array( const size_t length );
inline Array( const Array& other );
inline Array( Array&& other );
inline Array& operator = ( const Array& other );
inline Array& operator = ( Array&& other );
template< typename TValue >
inline Array<TValue>::Array( const Array<TValue>& other )
: Array{ other.m_length }
{
for( size_t index = 0; index < m_length; ++m_length )
{
m_memory[ index ] = other.m_memory[ index ];
}
}
template< typename TValue >
inline Array<TValue>& Array<TValue>::operator=( const Array<TValue>& other )
{
if( m_length != other.m_length )
{
delete[] m_memory;
m_length = other.m_length;
m_memory = new TValue[ m_length ];
}
for( size_t index = 0; index < m_length; ++m_length )
{
m_memory[ index ] = other.m_memory[ index ];
}
return *this;
}
template< typename TValue >
inline Array<TValue>::Array( Array<TValue>&& other )
: m_memory{ std::exchange( other.m_memory, nullptr ) }
, m_length{ std::exchange( other.m_length, 0 ) }
{
}
template< typename TValue >
inline Array<TValue>& Array<TValue>::operator=( Array<TValue>&& other )
{
delete[] m_memory;
m_memory = std::exchange( other.m_memory, nullptr );
m_length = std::exchange( other.m_length, 0 );
return *this;
}
template< typename TValue >
inline Array<TValue>::Array( const size_t length )
: m_length{ length }
{
if( m_length == 0 )
{
return;
}
m_memory = new TValue[ m_length ];
}
int
и double
?По значению?
Каждый раз будет копирование?
O'k возьмем код попроще
input.find(separator, i);
я просто не стал обозначать. Как и вопрос чрезмерного выделения памяти. Я только ответил человеку относительно length
внутри цикла. То есть оно вызовется только один раз независимо от количества циклов?
length
будет вызван только один раз для неизменяемой строки.length
на каждой итерации - это не проблема для производительности. Метод просто возвращает значение поля длины строки. Никаких подсчетов фактической длины при этом не производится. Об этом и говорит сложность O(1) для этого метода. У меня вопрос по поводу вызова .length(); внутри цикла.
string Name;
- как по-твоему это поле запишется в файл? Опиши ожидаемый тобой механизм, которым строка должна записаться в файл.In.write((char*)&a, sizeof(AutoBase));
- в файл ты пишешь блок памяти. Как по-твоему происходит процесс записи в файл блока памяти? Предполагается что в дальнейшем будут храниться структуры данных в виде словарей, в которых ключом является число - длина строк, а значением массив строк такой длинны.
Нет, не верно. Поиск имен подбирает, а не подставляет. Поиск подбирает лучшее соответствие исходя из возможности сужающего преобразования типа.
Это делается тогда, когда вариантов без сужения не находится.
С сигнатурой из вопроса функцию из шаблона инстанцировать получится только при явном определении параметров шаблона. В этом случае начнет работать сужающее преобразование.
Код в текущем решении плохой. Ты боишься за инстанцрование лишних функций, а сам написал гору частичных специализаций шаблона.
Можно сделать проще и понятнее - на базе всего нескольких шаблонов. Я чуть погодя покажу, следующим комментарием.