Всем доброго дня.
C C++ LINUX СЕТЕВОЕ ПРОГРАММИРОВАНИЕ
Суть вопроса в том, каким образом
Имеется задание по написанию программы
Присвоение за линию:
vector[1] = vector[0];
, а vector = other_vector;
std::swap
по умолчанию реализуется через три перемещения и его семантика заключается в том, чтобы разменять состояния переданных объектов.vector[1] = vector[0];
выполняет единичное копирование, а не перемещение.std::swap(vector[0], vector[1]);
не является семантически равнозначным коду vector[1] = vector[0];
. 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
я и сам делал когда было нужно.
По заданию ты должен сформировать символьный массив, а не использовать стандартную строку.
В этом и заключается твоя основная причина непонимания того, что тут можно сделать через ассемблер.
Ты должен определить массив символов, инициализировать его строковым литералом, после чего вручную провести реверс этого массива сперва на C++ без использования стандартных алгоритмов, а потом - тот же реверс, но уже через ассемблер.
Библиотеки для этого не нужны, тебе надо просто прочитать документацию по вставкам.