MyVector
. Ты знаешь что этот вектор инстанцирован из шаблона std::vector
, но не знаешь тип элементов этого вектора потому что тип уже 10 раз менялся в процессе рефакторинга.MyVector::value_type
чтобы узнать тип элемента вектора.value_type
.namespace str
{
namespace Internal
{
template< typename TChar, typename TCharTraits >
inline std::basic_string_view<TChar, TCharTraits> remainderSv(
const std::basic_string_view<TChar, TCharTraits> source,
const std::basic_string_view<TChar, TCharTraits> prefix
)
{
if( source.length() <= prefix.length() || !source.starts_with( prefix ) )
{
return {};
}
return source.substr( prefix.length(), source.length() - prefix.length() );
}
template< typename TSource >
inline auto GetView( const TSource& source )
{
return std::basic_string_view{ source };
}
template< typename TChar, typename TCharTraits, typename TAllocator >
inline std::basic_string_view<TChar, TCharTraits> GetView(
const std::basic_string<TChar, TCharTraits, TAllocator>& source
)
{
return source;
}
}
template< typename TSource, typename TPrefix >
inline auto remainderSv( const TSource& source, const TPrefix& prefix )
{
return Internal::remainderSv( Internal::GetView( source ), Internal::GetView( prefix ) );
}
}
remainderSv
потребляет любую комбинацию согласованных типов строк, а на недопустимой комбинации просто не может инстанцировать Internal::remainderSv
.Ведь в нешаблонную функцию подставляет, верно?
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));
- в файл ты пишешь блок памяти. Как по-твоему происходит процесс записи в файл блока памяти?
В каком виде у тебя задаются эти два числа, которые тебе надо сравнить?