Информация об изменениях

Сообщение Re: Концепция умного C++ от 18.04.2025 9:07

Изменено 18.04.2025 9:18 rg45

Re: Концепция умного C++
Здравствуйте, Shmj, Вы писали:

S>B здесь главное не поддаться греху гордыни — когда тебе хочется доказать другим что ты способен, что SFINAE и 4-х этажные шаблоны тебе по плечу. А нужно не поддаваться греху гордыни а наоборот проявить смирение и кротость — аскетизм. Ограничить себя в излишествах и довольствоваться простым минимализмом.

S>


На этот вопрос я тебе уже отвечал
Автор: rg45
Дата: 16.04.25
, но ты, как обычно, предпочёл "не заметить" неудобную информацию.

Что ж, повторюсь. Нормальные программисты используют шаблоны и SFINAE совсем не для того, чтобы кому-то что-то доказать, а для того, чтобы решать какие-то задачи. Отказ от использования перечисленного — это просто отказ от решения задач. А сложный и запутанный код, как правило, получается у новичков, которые только начинают осваивать этот подход. У опытных программистов даже со SFINAE код получается понятным и читабельным, вот тебе свежий пример:

http://rsdn.org/forum/cpp/8923323.1
Автор: rg45
Дата: 18.04.25


template <typename IteratorType, std::enable_if_t<
    IsDereferenceableToLvalue<IteratorType>
    and not IsPointer<IteratorType>
, int> = 0>
const char* rawConstCharPtrFromIterator(IteratorType it)
{
   return reinterpret_cast<const char*>(&*it);
}


Также повторюсь, что SFINAE потерял актуальность с приходом концептов. И современный C++ позволяет записывать то же самое компактнее и элегантнее:

http://rsdn.org/forum/cpp/8923201.1
Автор: rg45
Дата: 18.04.25


const char* rawConstCharPtrFromIterator(Pointer auto p)
{
   return reinterpret_cast<const char*>(p);
}
const char* rawConstCharPtrFromIterator(Dereferenceable auto it)
{
   return reinterpret_cast<const char*>(&*it);
}



А ты просто неуч и лентяй. Вместо того, чтобы учиться и осваивать язык, ты ищешь способы, как программировать, не приходя в сознание.
Re: Концепция умного C++
Здравствуйте, Shmj, Вы писали:

S>B здесь главное не поддаться греху гордыни — когда тебе хочется доказать другим что ты способен, что SFINAE и 4-х этажные шаблоны тебе по плечу. А нужно не поддаваться греху гордыни а наоборот проявить смирение и кротость — аскетизм. Ограничить себя в излишествах и довольствоваться простым минимализмом.

S>


На этот вопрос я тебе уже отвечал
Автор: rg45
Дата: 16.04.25
, но ты, как обычно, предпочёл "не заметить" неудобную информацию.

Что ж, повторюсь. Нормальные программисты используют шаблоны и SFINAE совсем не для того, чтобы кому-то что-то доказать, а для того, чтобы решать какие-то задачи. Отказ от использования перечисленного — это просто отказ от решения задач. А сложный и запутанный код, как правило, получается у новичков, которые только начинают осваивать этот подход. У опытных программистов даже со SFINAE код получается понятным и читабельным, вот тебе свежий пример:

http://rsdn.org/forum/cpp/8923323.1
Автор: rg45
Дата: 18.04.25


template<typename CharPointerType>
const char* rawConstCharPtrFromIterator(CharPointerType* pstr)
{
   return reinterpret_cast<const char*>(pstr);
}

template <typename IteratorType, std::enable_if_t<
    IsDereferenceableToLvalue<IteratorType>
    and not IsPointer<IteratorType>
, int> = 0>
const char* rawConstCharPtrFromIterator(IteratorType it)
{
   return reinterpret_cast<const char*>(&*it);
}


Также повторюсь, что SFINAE потерял актуальность с приходом концептов. И современный C++ позволяет записывать то же самое компактнее и элегантнее:

http://rsdn.org/forum/cpp/8923201.1
Автор: rg45
Дата: 18.04.25


const char* rawConstCharPtrFromIterator(Pointer auto p)
{
   return reinterpret_cast<const char*>(p);
}
const char* rawConstCharPtrFromIterator(Dereferenceable auto it)
{
   return reinterpret_cast<const char*>(&*it);
}



А ты просто неуч и лентяй. Вместо того, чтобы учиться и осваивать язык, ты ищешь способы, как программировать, не приходя в сознание.