Std utility что это за программа
Std utility что это за программа
STDU Viewer is a free viewer for multiple file formats. The goal of this software is to replace the multiple document viewers with a single one simple application. STDU Viewer supports TIFF, PDF, DjVu, XPS, JBIG2, WWF document formats. These are the most popular formats for scientific and technical documentation.
Additionally STDU Viewer supports FB2, TXT, Comic Book Archive (CBR or CBZ), TCR, PalmDoc(PDB), MOBI, AZW, EPub, DCX and image (BMP, PCX, JPEG, GIF, PNG, WMF, EMF, PSD) files.
STDU Viewer has comes with a multilanguage interface. Currently you can choose from English, Russian or French languages. It is possible to translate STDU Viewer’s interface into your language by changing strings in xml external resource.
STDU Viewer has modern tabbed interface and all standard features for this type of application (thumnail view, rotate page, search by text layer, etc). Also STDU Viewer has some extended features, such as: exporting a page or part of a page into an image file, creating your own bookmarks, setting an action for tap screen and some else others.
If a document supports text layer (TXT, TCR, PDB, FB2, PDF, XPS, MOBI, AZW, EPub or Djvu file), then STDU Viewer helps you export text from this type of documents to a file. You can export all text from document or text from some selected pages.
You can use STDU Viewer as a converter from DjVu and PDF files to a set of image files (BMP, GIF, PNG etc) which represent pages of a source document
STDU Viewer is provided as freeware for private non-commercial or educational use. For commercial use, it is necessary to register.
STDU Viewer что это за программа и как ее удалить?
Привет друзья
Хочу вам рассказать о такой программе как STDU Viewer, зачем она нужна и как ее удалить. Но удалять вы ее не спешите. Это небольшой но очень удобный просмотрщик файлов в формате PDF, DjVu, XPS, TIFF и других. В общем понимает очень много книжных форматов. Что это еще за книжные форматы? Ну, вот вы можете сидя у своего компа посмотреть почти любой популярный журнал в электронном виде. Их можно скачать в интернете. Вот они часто идут в формате PDF. Ну и его можно открыть программой STDU Viewer. Теперь я думаю вам все стало понятно
STDU Viewer полностью бесплатный для обычных юзеров и платный для всякого бизнес-использования так бы сказать.
В программе есть вкладки, можно сразу смотреть несколько книг или журналов. Присутствуют эскизы страниц, можно настроить шрифт и его размер.
Кстати на сайте разработчика есть еще портабельная версия, которая вообще не требует установки!
STDU Viewer можно рассматривать как альтернативное решение программам Adobe Acrobat, WinDjView, Foxit Reader и других.
Ну а теперь познакомимся с этой программой поближе. Я ее скачал и установил. Вот как она выглядит:
Это я открыл журнал Chip и потом нажал на эту кнопку, чтобы показывались миниатюры страниц:
Если нажать тут на первую кнопку, то можно смотреть журнал вот в таком виде, когда слева у вас разделы страниц:
Чтобы тут у вас не было непоняток, то вот смотрите что означают эти цифры. Вот на скриншоте выделено 024_029, это означает что на этих страницах размещена статья, то есть с 24 по 29. И если нажать на эти цифры, то вы перейдете к началу этой статьи. STDU Viewer как-то определяет где статьи, на какой странице начало и на какой конец, эта инфа наверно есть в самом файле.
Вот меню Инструменты, тут есть функции для выделения текста, картинки:
В настройки можно попасть из меню Файл:
Настроек много, но вроде бы как все они удобно упорядочены. Интересная возможность есть, это чтобы вкладки отличались цветами. Находится опция в разделе Вид вкладок:
На первой вкладке Общие можно увидеть какие форматы поддерживает программа, при необходимости можете снять галочки с некоторых:
Работает программа под процессом STDUViewerApp.exe, его можно увидеть в диспетчере задач.
В общем обычная читалка. Но маленький размер ее и то что она шустро работает, цветные вкладки ее бесплатность делают ее очень привлекательной на фоне остальных решений. Так что лично я ничего не имею против, STDU Viewer годная программа
Но если она вам не нужна или попала на компьютер случайно, а то и вовсе вы ее не устанавливали, то я понимаю ваше желание ее удалить. Ну значит так тому и быть
Напомню, что вы можете для деинсталляции использовать удалятор Revo Uninstaller. Это такой специальный удалятор, который умеет продвинуто удалять программы, удаляя также и мусор который они могут оставить после себя. Так что рекомендую
Ну так вот. Открываем меню Пуск и выбираем там Панель управления (а если у вас десятая Windows, то там зажмите Win + X и в появившемся меню будет данный пункт):
Находим и запускаем значок Программы и компоненты:
Теперь находим там STDU Viewer, нажимаем правой кнопкой и выбираем Удалить:
Появится сообщение, мол реально ли вы хотите удалить программу, нажимаете тут Да (если не передумали):
Потом будет еще какое-то странное окошко про совместное использование файла, тут нажимаете Да для Всех:
И все, потом все быстренько удалится:
Надеюсь что все я написал доступно и понятно, и что для вас эта инфа была полезной. Желаю удачи вам
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.
STDU Viewer для Windows
Позволяет просматривать несколько документов в одном окне, а также отображает эскизы страниц документа на боковой панели. Для чтения нескольких книг предусмотрены отдельные вкладки с возможностью поиска по каждой из них, а система закладок позволяет вернуться к последней прочитанной странице в любой момент времени.
Есть возможность масштабирования страниц, одновременное отображение нескольких страниц на экране, поворот страниц на 90 градусов, настройки яркости, контрастности, гаммы при отображении документа, добавления закладок, для быстрого поиска важных фрагментов текста, распечатка документа.
Для отображения текстовых документов в настройках приложения указывается шрифт, его размер, цвет, определяются правила показа абзацев. Также имеется возможность сохранения DjVu в текстовый файл (при наличии внедренного OCR слоя) всего документа или конкретных страниц, указав их номера. а также конвертация DjVu в другие графические форматы: bmp, gif, jpeg и png.
Небольшая бесплатная портативная утилита, позволяющая сканировать документы с помощью.
Отзывы о программе STDU Viewer
Ганимед про STDU Viewer 1.6.375 [17-11-2021]
Программа, которая читает ВСЁ! Я искал читалку PDF, но с этой программой нашел гораздо большее.
Спасибо, Softportal!
| | Ответить
Al про STDU Viewer 1.6.375 [25-06-2019]
МаринаПопова про STDU Viewer 1.6.375 [27-02-2019]
ОЧЕНЬ ХОЧЕТСЯ как-то сохранять закладки на случай непредвиденных событий. Чтобы не потерять хорошие подборки. и Установить их на новой версси, если что
3 | 3 | Ответить
uzel11 про STDU Viewer 1.6.375 [17-01-2019]
Даже лучше, чем я хотел!
3 | 4 | Ответить
стду про STDU Viewer 1.6.375 [21-12-2018]
ЗДЕЛАЙТЕ ПОЖАЛУСТА ШТОБЫ МОЖНО БЫЛО ИМПОРТИРОВАТЬ И ЕКСПОРТИРОВАТЬ ЗАКЛАДКИ
6 | 3 | Ответить
Евгений в ответ стду про STDU Viewer 1.6.375 [11-07-2020]
Stdutility что это за программа?
STDU Viewer
Для просмотра документов мы рекомендуем вам скачать STDU Viewer бесплатно на компьютер, который может работать с электронными документами любого формата, в том числе: JBIG2, TIFF, DjVu, PDF, XPS.
Часто для просмотра и для работы с такими документами приходилось использовать дополнительные утилиты. Теперь благодаря программе надобность в них исчезла.
Кроме того, STDU Viewer поддерживает форматы CBZ, СBR, 2, TCR, TXT. Справится она и с графическими документами GIF, PSD, BMP, WMF, JPEG, EMF, PNG.
Интерфейс программы рассчитан на работу с документами указанных выше форматов, так что все необходимые команды вы легко найдете.
Кроме того, STDU Viewer экспортирует страницу или ее часть в изображение, позволяет создавать закладки, прокручивать страницу вниз, создавать переходы на другие части текста при нажатии на определенные отрывки выделенной страницы.
Не подведет вас программа и в случае, если надо конвертировать форматы DjVu и PDF в привычные PNG, BMP, GIF.
Можно скачать STDU Viewer бесплатно. Она предназначена для использования в частных некоммерческих или образовательных целях.
В случае, если планируется использование ее в коммерческих целях, то в этом случае придется пройти процедуру регистрации и приобрести лицензию.
Функционал
Интерфейс STDU Viewer обладает вкладками, которые позволяют просматривать на экране сразу несколько документов, причем можно проставить параметры отражения текста. Например, можно отразить на экране всю страницу или только документ по ширине.
Страницы можно поворачивать на 90 градусов. Данная функция пригодится тем, кто читает с монитора, установленного в портретном положении. Так же можно будет настраивать яркость, гамму и контрастность при чтении.
Для быстрого нахождения нужного куска текста предусмотрено добавление закладок.
На боковой станице документа отражается содержание и эскизы текста.
Удобная система поиска позволяет ввести дополнительные фильтры. Если вы скачали STDU Viewer для Windows 7, 8, 10, то вам предложат три режима поиска, в ходе которых все найденные результаты будут отражаться списком.
Данная утилита позволит вам распечатать файлы формата PDF, даже если они защищены от печати.
В случае обнаружения ошибок в некорректно сканируемых страницах у пользователей есть возможность их исправить.
Правда, при печати файлов формата PDF происходит создание временного файла, который несколько тормозит работу некоторых принтеров.
Достоинства и недостатки
Среди широких возможностей, которые открывает перед пользователями данная программа, стоит отметить и дополнительные бонусы:
Однако стоит отметить то, что не всем пользователям пришлось по душе. Например, данная программа не поддерживает форматы HTML, CHM, DOC, LIT.
Установка программы на Windows
Если вы собираетесь скачать STDU Viewer на русском языке, то прежде всего вам надо ознакомиться с алгоритмом установки. После скачивания надо будет распаковать архив. Далее следует дважды кликнуть по установочному файлу.
Если вы собираетесь работать в программе, где интерфейс представлен на русском языке, то в процессе установки выберете русский вариант и подтвердите свой выбор кликанием на клавишу «Ок».
Прочитав приветствие, нажмите на «Далее». Если вас устраивает место, куда программа предлагает установить данную утилиту, то вновь нажимаем на «Далее». Вас спросят о желании разместить ярлык программы в меню Пуск. Согласны? Вновь нажимайте на «Далее». Таким же образом принимаете решение о появлении ярлыка на рабочем столе.
Обратите внимание на окно «Интеграция в оболочку». Здесь можно обозначить те файлы, которые будут просматриваться программой по умолчанию.
Можете поставить галочки рядом с нужными вами форматами документов или все оставить так, как есть. Теперь осталось нажать на «Установить» и немного подождать. После этого вы можете найти на рабочем столе или в меню Пуск значок этой программы и использовать его, наслаждаясь качественной работой приложения.
Разработчики постоянно следят за своим детищем и периодически выпускают обновления, расширяющие возможности программы и исправляющие ошибки, которые были найдены в предыдущих версиях.
Как удалить программу с компьютера
Пуск –> Панель управления –> Поиск (удаление программ) –> Находим программу и правой кнопкой мыши – Удалить. Перезагрузка не потребуется для дальнейшей работы.
Похожие программы
Заключение
Программа позволит вам избавиться от иных софтов, которые до этого вы использовали с целью работы с электронными документами разных форматов. Не занимает много места, легко устанавливается.
Ее интерфейс полностью русифицирован и разобраться в нем очень легко. Меню интуитивно понятно и функционально. Скачайте STDU Viewer бесплатно русскую версию для Windows 7 и Windows 8 с официального сайта по ссылке ниже.
Системные требования
Отзывы о программе
Просмотрщик электронных документов STDU Viewer широко используется пользователями во всем мире не только для открытия файлов в формате PDF и аналогичных, но и для просмотра графических изображений. Практические все отзывы о программе положительные, но встречаются и замечания.
Очень часто приложение используется для чтения электронных книг в различных форматах (2, TXT и т.д.), а также для просмотра комиксов (файлы типа CBZ и CBR) и графических файлов (JPG, BMP, GIF и т.д.).
В качестве преимуществ утилиты STDU Viewer пользователи упоминают широкие возможности, которые она предоставляет. Страницы можно масштабировать, настраивать контрастность и яркость, менять ориентацию, настраивать показ одной или сразу нескольких страниц и т.д. При необходимости файлы можно распечатать, для печати предоставлено множество гибких настроек.
Отмечается также удобное создание закладок. Они сохраняются не в документе, а в настройках программы и могут быть перенесены с одного компьютера на другой через опцию импорта.
К преимуществам утилиты относятся быстрота скачивания и установки, нетребовательность к ресурсам, простота использования и понятный интерфейс.
Из недостатков пользователи отмечают малое количество функциональных возможностей, а также устаревший интерфейс.
Стоит ли устанавливать
Скачать последнюю версию STDU Viewer на компьютер рекомендуется всем, кому нужен удобный просмотрщик PDF-файлов и аналогичных, а также графических изображений. Программа отлично подходит для чтения электронных книг. Приложение позволяет менять настройки страницы во время просмотра, распечатывать нужную информацию, экспортировать текст в виде картинки или текстового документа. Утилита удобна в использовании, легко и быстро устанавливается на компьютер и имеет удобный и понятный интерфейс.
Скачать СТДУ Вивер
Что такое STDUViewerApp.exe? Это безопасно или вирус? Как удалить или исправить это
STDUViewerApp.exe это исполняемый файл, который является частью STDU Viewer Программа, разработанная STDUtility, Программное обеспечение обычно о 2.68 MB по размеру.
Рекомендуется: Выявление ошибок, связанных с STDUViewerApp.exe.
(опциональное предложение для Reimage — Cайт | Лицензионное соглашение | Политика Kонфиденциальности | Удалить)
STDUViewerApp.exe безопасно, или это вирус или вредоносное ПО?
Первое, что поможет вам определить, является ли тот или иной файл законным процессом Windows или вирусом, это местоположение самого исполняемого файла. Например, такой процесс, как STDUViewerApp.exe, должен запускаться из C: \ Program Files \ STDU Viewer \ STDUViewerApp.exe, а не в другом месте.
Если статус процесса «Подтвержденный подписчик» указан как «Невозможно проверить», вам следует взглянуть на процесс. Не все хорошие процессы Windows имеют ярлык проверенной подписи, но ни один из них не имеет плохих.
Наиболее важные факты о STDUViewerApp.exe:
Если у вас возникли какие-либо трудности с этим исполняемым файлом, перед удалением STDUViewerApp.exe вы должны определить, заслуживает ли он доверия. Для этого найдите этот процесс в диспетчере задач.
Найдите его местоположение (оно должно быть в C: \ Program Files \ STDU Viewer \) и сравните его размер с приведенными выше фактами.
Если вы подозреваете, что можете быть заражены вирусом, вы должны немедленно попытаться это исправить. Чтобы удалить вирус STDUViewerApp.exe, необходимо Загрузите и установите приложение полной безопасности, например Malwarebytes., Обратите внимание, что не все инструменты могут обнаружить все типы вредоносных программ, поэтому вам может потребоваться попробовать несколько вариантов, прежде чем вы добьетесь успеха.
Кроме того, функциональность вируса может сама влиять на удаление STDUViewerApp.exe. В этом случае вы должны включить Безопасный режим с поддержкой сети — безопасная среда, которая отключает большинство процессов и загружает только самые необходимые службы и драйверы. Когда вы можете запустить программу безопасности и полный анализ системы.
Не следует удалять безопасный исполняемый файл без уважительной причины, так как это может повлиять на производительность любых связанных программ, использующих этот файл. Не забывайте регулярно обновлять программное обеспечение и программы, чтобы избежать будущих проблем, вызванных поврежденными файлами. Что касается проблем с функциональностью программного обеспечения, проверяйте обновления драйверов и программного обеспечения чаще, чтобы избежать или вообще не возникало таких проблем.
Согласно различным источникам онлайн, 1% людей удаляют этот файл, поэтому он может быть безвредным, но рекомендуется проверить надежность этого исполняемого файла самостоятельно, чтобы определить, является ли он безопасным или вирусом. Лучшая диагностика для этих подозрительных файлов — полный системный анализ с Reimage, Если файл классифицируется как вредоносный, эти приложения также удаляют STDUViewerApp.exe и избавляются от связанных вредоносных программ.
Однако, если это не вирус, и вам нужно удалить STDUViewerApp.exe, вы можете удалить программу STDU Viewer с вашего компьютера, используя программу удаления, которая должна находиться по адресу: MsiExec.exe / I <22E92EBB-1B7C-4962-924D- E58A9C3CADD8>. Если вы не можете найти его деинсталлятор, то вам может потребоваться удалить STDU Viewer, чтобы полностью удалить STDUViewerApp.exe. Вы можете использовать функцию «Установка и удаление программ» на панели управления Windows.
Распространенные сообщения об ошибках в STDUViewerApp.exe
Наиболее распространенные ошибки STDUViewerApp.exe, которые могут возникнуть:
• «Ошибка приложения STDUViewerApp.exe.» • «Ошибка STDUViewerApp.exe». • «Возникла ошибка в приложении STDUViewerApp.exe. Приложение будет закрыто. Приносим извинения за неудобства.» • «STDUViewerApp.exe не является приложением Win32». • «STDUViewerApp.exe не запущен». • «STDUViewerApp.exe не найден». • «Не удается найти STDUViewerApp.exe.» • «Ошибка запуска программы: STDUViewerApp.exe.»
• «Неверный путь к приложению: STDUViewerApp.exe».
Как исправить STDUViewerApp.exe
Аккуратный и опрятный компьютер — это один из лучших способов избежать проблем с STDU Viewer. Это означает выполнение сканирования на наличие вредоносных программ, очистку жесткого диска cleanmgr и ПФС / SCANNOWудаление ненужных программ, мониторинг любых автозапускаемых программ (с помощью msconfig) и включение автоматических обновлений Windows. Не забывайте всегда делать регулярные резервные копии или хотя бы определять точки восстановления.
Если у вас возникла более серьезная проблема, постарайтесь запомнить последнее, что вы сделали, или последнее, что вы установили перед проблемой. Использовать resmon Команда для определения процессов, вызывающих вашу проблему. Даже в случае серьезных проблем вместо переустановки Windows вы должны попытаться восстановить вашу установку или, в случае Windows 8, выполнив команду DISM.exe / Online / Очистка-изображение / Восстановить здоровье, Это позволяет восстановить операционную систему без потери данных.
Чтобы помочь вам проанализировать процесс STDUViewerApp.exe на вашем компьютере, вам могут пригодиться следующие программы: Менеджер задач безопасности отображает все запущенные задачи Windows, включая встроенные скрытые процессы, такие как мониторинг клавиатуры и браузера или записи автозапуска. Единый рейтинг риска безопасности указывает на вероятность того, что это шпионское ПО, вредоносное ПО или потенциальный троянский конь. Это антивирус обнаруживает и удаляет со своего жесткого диска шпионское и рекламное ПО, трояны, кейлоггеры, вредоносное ПО и трекеры.
Мы рекомендуем вам попробовать этот новый инструмент. Он исправляет множество компьютерных ошибок, а также защищает от таких вещей, как потеря файлов, вредоносное ПО, сбои оборудования и оптимизирует ваш компьютер для максимальной производительности. Это исправило наш компьютер быстрее, чем делать это вручную:
(опциональное предложение для Reimage — Cайт | Лицензионное соглашение | Политика Kонфиденциальности | Удалить)
Загрузите или переустановите STDUViewerApp.exe
это не рекомендуется загружать файлы замены exe с любых сайтов загрузки, так как они могут сами содержать вирусы и т. д. Если вам нужно скачать или переустановить STDUViewerApp.exe, то мы рекомендуем переустановить основное приложение, связанное с ним STDU Viewer.
Информация об операционной системе
Ошибки STDUViewerApp.exe могут появляться в любых из нижеперечисленных операционных систем Microsoft Windows:
РЕКОМЕНДУЕМЫЕ: Нажмите здесь, чтобы устранить ошибки Windows и оптимизировать производительность системы
Концепты: упрощаем реализацию классов STD Utility
Появляющиеся в C++20 концепты — давно и широко обсуждаемая тема. Несмотря на избыток материала, накопившегося за годы (в т.ч. выступления экспертов мирового уровня), среди прикладных программистов (не засыпающих ежедневно в обнимку со стандартом) все еще остается неразбериха, что же такое С++20-концепты и так ли они нам нужны, если есть проверенный годами enable_if. Частично виной тому то, как концепты эволюционировали за
Под катом — видео и расшифровка доклада Андрея Давыдова из команды ReSharper C++ с конференции C++ Russia 2019. Андрей сделал краткий обзор concept-related нововведений C++20, после чего рассмотрел реализацию некоторых классов и функций STL, сравнивая C++17 и С++20-решения. Далее повествование — от его лица.
Поговорим о концептах. Это довольно сложная и обширная тема, так что, готовясь к докладу, я был в некотором затруднении. Я решил обратиться к опыту одного из лучших спикеров C++ комьюнити Андрея Александреску.
В ноябре 2018 года, выступая на открытии Meeting C++, Андрей спросил аудиторию о том, что будет следующей большой фичей C++:
Давайте и мы начнём с этого вопроса. Считаете ли вы, что следующей большой фичей в C++ будут концепты?
По мнению Александреску, концепты — это скучно. Вот этой скучной вещью я и предлагаю вам заняться. Тем более, что я всё равно не смогу так же интересно и зажигательно рассказать про метаклассы, как Герб Саттер, или про интроспекцию, как Александреску.
Что мы имеем в виду, когда говорим о концептах в C++20? Эта фича обсуждалась как минимум с 2003 года, и она за это время успела сильно эволюционировать. Давайте разберёмся, какие новые concept related-фичи появились в C++20.
Я не просто так использовал фразу «на шаблонных параметрах», а не «на типах», потому что концепты можно определять и на нетиповых шаблонных параметрах. Если вам совсем делать нечего, можно определить концепт для числа:
Но гораздо больше смысла в том чтобы смешивать типовые и нетиповые шаблонные параметры. Назовём тип маленьким, если его size и alignment не превышает заданных ограничений:
Наверное, пока неочевидно, почему нам нужно городить в языке новую сущность, и почему концепт — это не просто constexpr bool переменная.
Как используются концепты
Чтобы разобраться, давайте посмотрим, как используются концепты.
Во-первых, так же, как и constexpr bool переменные, их можно использовать везде, где вам в compile-time нужно булевское выражение. Например, внутри static_assert или внутри noexcept
спецификаций:
Requires expression
Requires expression — это целое семейство expression’ов, все они имеют тип bool и вычисляются в compile-time. Их используют для проверки утверждений о выражениях и типах. Requires expression очень удобно применять для определения концептов.
Того, что мы рассмотрели, уже достаточно, чтобы показать полноценный пример использования концептов.
Вы уже видели подобный пример использования концептов или что-то очень похожее? Я такое видел несколько раз. Честно скажу, меня это совсем не убеждало. Нужно ли нам городить в языке столько новых сущностей, если можно получить это в C++17?
Пример выше как будто бы написан через концепты. У меня есть гипотеза: этот пример неубедительный, потому что он не использует главную фичу концептов — requires clause.
Requires clause
Где в нашем примере с сортировкой, мы можем использовать requires clause? Вместо краткого синтаксиса применения концептов напишем так:
Итоговый список concept-related фич
Список concept-related нововведений в C++20 выглядит так. Пункты в этом списке отсортированы по возрастанию полезности фичи с моей субъективной точки зрения:
Подробнее о requires expression
Прежде чем мы перейдём к обсуждению requires clause, пара слов о requires expression.
В C++20 мы можем это переписать без использования расширений компилятора, стандартным кодом. Как мне кажется, стало не хуже:
Второй момент — это то, что надо быть бдительным с синтаксисом requires expression.
Они довольно мощные, и эта мощь достигается тем, что вводится много новых синтаксических конструкций. В них можно запутаться, по крайней мере, поначалу.
Давайте я исправлю подсветку кода. Слева код раскрашен так, как мне бы хотелось. А на самом деле, он должен быть раскрашен так, как справа:
Но это просто забавный пример. В общем-то, просто нужно проявлять аккуратность.
Примеры использования концептов
Реализация класса pair
Дальше я буду демонстрировать какие-то фрагменты STL, которые можно реализовать в C++17, но довольно громоздко.
А затем мы посмотрим, как в C++20 мы можем улучшить имплементацию.
Для этого нужно сделать конструктор по умолчанию шаблонным и ограничить его по SFINAE.
Первая идея, которая приходит в голову, — давайте напишем так, что этот конструктор разрешён, только если f и s — is_default_constructable :
Чтобы это преодолеть, давайте добавим ещё шаблонных параметров в этот конструктор и сделаем так, чтобы условие enable_if_t было зависимо от этих шаблонных параметров:
Cитуация довольно забавная. Дело в том, что шаблонные параметры T и U не могут быть заданы пользователем явно. В C++ нет синтаксиса для того, чтобы явно задать шаблонные параметры конструктора, они не могут быть выведены компилятором, потому что ему их неоткуда выводить. Они могут прийти только из значения по умолчанию. То есть, эффективно этот код ничем не отличается от кода в предыдущем примере. Однако с точки зрения компилятора, он валидный, а в предыдущем примере — нет.
Мы решили нашу первую проблему, но сталкиваемся со второй, чуть более тонкой. Предположим, у нас есть класс B с explicit конструктором по умолчанию, и мы хотим неявно сконструировать pair :
У нас это получится, но, по стандарту, не должно получиться. По стандарту, пара должна неявно дефолт конструироваться, только если оба её элемента неявно дефолт конструируются.
Вопрос: нужно ли нам писать конструктор пары explicit или нет? В C++17 у нас есть соломоново решение: давайте напишем и такой, и такой.
Теперь у нас два конструктора по умолчанию:
К слову, для реализации type trait is_implicitly_default_constructible в C++17, я знаю такое решение, но решения без SFINAE я не знаю:
В разных компиляторах эта ошибка будет разной степени понятности. К примеру, майкрософтовский компилятор в данном случае говорит: «Не получилось сконструировать пару от пустых фигурных скобок». GCC и Clang к этому ещё добавят: «Мы попробовали такой и такой конструктор, ни один из них не подошёл», — и про каждый скажут причину.
Какие у нас тут есть конструкторы? Есть сгенерированные компилятором copy и move конструкторы, есть написанные нами. С copy и move всё просто: они ожидают один параметр, мы передаём ноль. Для нашего конструктора причина в том, что подстановка зафейлилась.
GCC говорит: «Substitution failed, попытался найти внутри enable_if тип type — не нашёл, извините».
Это можно преодолеть, если мы разобьём enable_if на четыре таким образом:
Теперь при попытке неявно сконструировать пару мы получим отличное сообщение, что такой-то кандидат не подходит, потому что type trait is_implicitly_default_constructable не удовлетворён:
Может даже на секунду показаться: зачем нам концепт, если у нас такой классный компилятор?
Но потом мы вспоминаем, что для реализации конструктора по умолчанию используются две шаблонные функции, а в каждой по шесть шаблонных параметров. Для языка, претендующего на звание мощного, это перебор.
Концепт ImplicitlyDefaultConstructible можно реализовать с помощью такого симпатичного requires expression, внутри которого используются почти только скобки разной формы:
Реализация класса Optional в C++17
Давайте попробуем написать минимальную рабочую реализацию. Как она должна выглядеть? Хотелось бы так, но у нас в C++ нет алгебраических типов данных:
Давайте напишем их. Их всего четыре: два конструктора и два assignment оператора. Я ограничусь двумя, поскольку они симметричны. Выберем из каждого класса по представителю. Напишем copy constructor. Он довольно простой:
Напишем move assignment. Он чуть более громоздкий, поскольку нужно разбирать случаи:
Здесь мы использовали для типа T три операции: move constructor, move assignment и деструктор:
На эти три операции нам нужно написать спецификацию noexcept :
Класс optional будет выглядеть примерно таким образом:
Но тут мы сталкиваемся с той же проблемой, что и с конструктором по умолчанию класса pair :
когда мы пытаемся проинстанцировать этот Optional от чего-то, у чего некоторые специальные операции не существуют (например, deleted), мы получаем compilation error.
Желаемое поведение было бы, чтобы optional от unique_ptr можно было бы инстанцировать,
просто copy constructor и copy assignment были бы deleted. В случае с конструктором по умолчанию пары мы решали это тем, что делали его шаблонным, а потом ограничивали по SFINAE.
Это решение не подходит для copy и move конструкторов и assignment операторов, поскольку у них жёстко определена сигнатура — они не могут быть шаблонными. Можно написать что-то шаблонное, что после подстановки напоминает copy конструктор, но в действительности им не является.
Возможное решение — использовать трюк. В каждой из специальных операций начнём с copy конструктора и определим две вспомогательные структуры: deleted operation и, собственно, operation:
К счастью, у нас есть способ сделать лучше. Давайте вспомним нашу метафункцию select_copy_construct :
Соответственно, у нас нет нашего copy конструктора. Так же мы сделаем для всех остальных операций, плюс ещё добавим select_destruct для деструктора. Поскольку деструктор для int ничего не делает, но из-за того что мы написали какой-то код, он перестал быть тривиальным.
Таким образом, наша иерархия увеличивается ещё немножко, мы добавили туда деструктор. Опять же, безобразно, зато работает:
Все наши проблемы были из-за реализации специальных мемберов. Давайте посмотрим на них немного отвлечённо. Операции в первом приближении делятся на два класса: нормальные и deleted.
Для каждой из этих перегородок у нас есть специальный type trait, который говорит, в какую сторону от перегородки попадает наша операция. Тут, например, copy конструктор: он deleted или нормальный, он nothrow или нет, и тривиальный ли он?
С другой стороны, если вы реализуете свой класс и вы хотите обеспечить в нём какой-то special member, то, в зависимости о того, чего вы пытаетесь достичь, у вас есть следующие средства:
Давайте просто возьмём эту схему и перенесём один в один на код с концептами.
Реализация класса optional в C++20
Как в C++20 должен выглядеть optional и его copy конструктор?
Есть три реализации:
То есть requires clause работает не как = delete :
И это нормально, что мы имеем несколько copy конструкторов, несколько перегрузок, даже не отрезанных requires clause. Просто из них будет выбираться более предпочтительная.
Более того, мы даже можем иметь несколько деструкторов. Дождались! Сорок лет в C++ нельзя было перегружать деструкторы, ну что такое? И вот, наконец, можно. По этому поводу было обсуждение и некоторые люди, особенно разработчики компилятора, были не очень рады, что теперь можно перегружать деструкторы. Но консенсус таков, что фича полезная, поэтому давайте дадим её пользователям, чтобы можно было вот таким образом, допустим, тот же optional реализовывать.
Правда, если вы сейчас попробуете скомпилировать этот код, то GCC упадёт с internal compiler error, а Clang не будет правильно работать. Но это понятно, поддержать концепты сложно. У них ещё есть время, они подтянутся.
В принципе, это почти всё, что я хотел сказать про реализацию optional в C++20. Как видим, существенно меньше мучений, чем в C++17.
Альтернатива aligned_storage и aligned_union
На C++20 нам не нужно вообще вводить дополнительный шаблонный параметр,
для того чтобы специализировать классы, ведь у нас есть для этого
requires clause. То есть та же самая идея в C++20 записывается такой вот requires clause:
Использование requires clause для template type alias
Код, который не поддержит ни один компилятор
Я надеюсь, что вам было не очень скучно читать про концепты. У меня есть ещё один пример кода:
Если вам понравился этот доклад Андрея Давыдова — обратите внимание, что он уже вовсю готовит новый. Совсем скоро в Петербурге пройдет C++ Russia 2019 Piter, где Андрей выступит с темой «Модули: изменения в core language». В этом докладе он расскажет, например, следующее: что такое reachable entity и чем это отличается от visible, как модули влияют на ADL, могут ли entities с internal linkage протечь в другой модуль. А кроме него, тему модулей на C++ Russia будет раскрывать ещё и Дмитрий Кожевников (JetBrains) с докладом «Модули в С++20 — правда или вымысел?»