LINUX.ORG.RU

Посоветуйте безщупальцевую STL С++

 


1

7

Существуют ли в природе библиотки-обёртки над STL, ограничивающиеся заголовочниками и предоставляющие в целом те же возможности что и стандартная библиотека С++, вероятно, с небольшими плюшками, и обладающие той же продуманностью?

Но! При этом, с интерфейсом, предназначенным для рук землян, а не щупалец инопланетных монстров?

Т.е. без подобного маразма, когда прочитать объект типа std::string из std::filestream (сэкономили 3 буквы, молодцы!) std::fstream можно только через статическую функцию, но не член класса std::fstream.

Зато с сахарком, вроде того, чтобы можно было складывать вектора друг с другом или, о боже, разнотипные контенеры. Ну и прочими приятностями, делающими волосы в серые будни, гладкими и шелковистыми.

★★★★★
Ответ на: комментарий от anonymous

sref = 777; // oops

1) в смысле «oops»? что хотели, то и получили

2) зачем вообще нужно использовать std-шный string, когда уже есть тот, который работает так, как вы хотите?

next_time ★★★★★
() автор топика
Ответ на: комментарий от next_time

1) в смысле «oops»? что хотели, то и получили

Нет, получили облом :-) Потому что переопределение функции при открытом наследовании означает то, что именно переопределённая функция будет вызвана в случае её вызова для любого объекта родительского класса. Иначе нет никакого смысла в открытом наследовании (т.к. интерфейс не наследуется).

2) зачем вообще нужно использовать std-шный string, когда уже есть тот, который работает так, как вы хотите?

Зачем вообще открыто наследоваться от std::string, если поведение будет не полиморфным по отношению к std::string. Определять тогда уже свой класс MyString.

anonymous
()
Ответ на: комментарий от anonymous

Потому что переопределение функции при открытом наследовании означает то, что именно переопределённая функция будет вызвана в случае её вызова для любого объекта родительского класса.

только если она была объявлена виртуальной

если поведение будет не полиморфным по отношению к std::string

Всё зависит от ваших пожеланий для каждой конкретной ф-ции. Можно полиморфно делать, а можно и не полиморфно.

next_time ★★★★★
() автор топика
Ответ на: комментарий от next_time

только если она была объявлена виртуальной

Совершенно верно. А т.к. operator= в basic_string не виртуален, то его и переопределить невозможно по определению. Но ты же говорил про переопределение, и сам же пришёл к тому, что для переопределения функция должна быть виртуальной. Иначе не будет переопределения, не будет полиморфизма, не будет наследования интерфейса. Т.е открыто наследоваться от std::string нельзя.

Всё зависит от ваших пожеланий для каждой конкретной ф-ции. Можно полиморфно делать, а можно и не полиморфно.

Ну да, так и есть. Те, кто проектировал std::string, не пожелали делать operator= виртуальным, а потому переопределять его нельзя. Довольствуйтесь тем, что есть.

anonymous
()
Ответ на: комментарий от next_time

Да, так оно было бы приятнее, поэтому я открыл сию тему.

Такая реализация не обязательно будет лучше. Да и вообще вся затея с «лучше/другий» стандартной библиотекой — так себе затея:

  1. Сложно поддерживать актуальность/фиксы (напр. как в случае с At контейнерами которые все еще(?) не умеют в emplace_back())
  2. Учиться новому API, которое не такое как в стандарте, а «лучше»
  3. Документировать єту модную молодежную библиотеку ето будет? (Запилить что-то сносное как cppreference.com, а не как в boost)
  4. И т.д. (лень капитанствовать)
KennyMinigun ★★★★★
()
Ответ на: комментарий от KennyMinigun

At контейнерами

это которые?

фиксы

это же простая обёртка, там попросту нечего фиксить

актуальность

глядя на скорость обновления STL, это не проблема

Учиться новому API

зачем? есть автодополнение, а для разумного интерфейса большего и не нужно. уместно вспомнить Qt, например

как в boost

мне норм

next_time ★★★★★
() автор топика
Ответ на: комментарий от anonymous

откройте хидер basic_string, да допишите virtual, если вам надо. мне - нет.

next_time ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Теперь понятно. Непонятно только что тут «подслащивать». Да и всегда для такого можно свою однострочную функцию написать.

dzidzitop ★★
()
Ответ на: комментарий от KennyMinigun

STL - это не все шаблоны вообще. STL - контейнеры STL + алгоритмы + пачка адаптеров. Остальное к STL не имеет отношения. fstream уж 100% не относится, даже если какую-то часть STL не описал выше.

dzidzitop ★★
()
Ответ на: комментарий от next_time

Там не пламени - только струя расправленного металла с электрода или с детали на электрод. Ну и сварка - это когда металл расплавленный стекается и остывает. Безопасным этот процесс в принципе не будет.

dzidzitop ★★
()
Ответ на: комментарий от next_time

Не проверял соответствие fstream требованиям к контейнеру STL.

Но оно не имеет begin()/end(), если не ошибаюсь - поэтому это не контейнер STL. Если ошибаюсь - поправляй.

dzidzitop ★★
()
Ответ на: комментарий от dzidzitop

Standard Template Library - это не все шаблоны вообще.

да, а только Standard, т.е. и streams тоже.

вот наследие С в СТЛ не входит

next_time ★★★★★
() автор топика
Ответ на: комментарий от dzidzitop

Да и всегда для такого можно свою однострочную функцию написать.

именно, но когда вся стандартная библиотека по мелочам не нравится, хочется все эти мелочи исправить одним махом

и разумеется, велосипедостроительство - главный враг программиста

next_time ★★★★★
() автор топика
Ответ на: комментарий от dzidzitop

Безопасным этот процесс в принципе не будет.

если закрыть герметичным кожухом, то будет

next_time ★★★★★
() автор топика
Ответ на: комментарий от next_time

stl - поделие Алекса Степанов. Это часть стандартной библиотеки C++, но не вся библиотека.

dzidzitop ★★
()
Ответ на: комментарий от dzidzitop

как будто, у оператора + производительность будет меньше, если он использует внутри себя ту же строчку

next_time ★★★★★
() автор топика
Ответ на: комментарий от next_time

Естественно, они только *совместимы*. Однако шаблонный код использующий container.emplace_back не заработает

KennyMinigun ★★★★★
()
Ответ на: комментарий от next_time

Диапазон итераторов может быть другим, могут быть адаптеры итераторов, вставка может быть не в конец, итд.

dzidzitop ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.