Клиентский пример HTTP на win32

Существует несколько причин.

Первый, производительность: Да, издержки виртуальной функции относительно низко замечены в изоляции. Но это также препятствует тому, чтобы компилятор встроил, и это огромно источник оптимизации в C++. Библиотека стандарта C++ работает, а также она делает, потому что она может встроить десятки и десятки маленьких острот, из которых она состоит. Кроме того, класс с виртуальными методами не является типом данных POD, и таким образом, много ограничений относится к нему. Это не может быть скопировано только memcpy'ing, это становится более дорогим для построения и занимает больше места. Существует много вещей, которые внезапно становятся недопустимыми или менее эффективными, как только тип не-POD включен.

И во-вторых, хорошая практика ООП. Точка в классе - то, что он делает некоторую абстракцию, скрывает ее внутренние детали и обеспечивает гарантию, что "этот класс будет вести себя так и так и будет всегда поддерживать эти инварианты. Это будет никогда , заканчиваются в недопустимом состоянии". Этому довольно трудно соответствовать, если Вы позволяете другим переопределять какой-либо функция членства. Функции членства, которые Вы определили в классе, там, чтобы гарантировать, что инвариант сохраняется. Если мы не заботились, о котором, мы могли просто обнародовать внутренние элементы данных, и позволять людям управлять ими по желанию. Но мы хотим, чтобы наш класс был последователен. И это означает, что мы должны определить поведение его открытого интерфейса. Это может включить конкретный точки настраиваемости путем создания отдельных функций виртуальными, но это почти всегда также включает создание большинства невиртуальных методов, так, чтобы они могли сделать задание обеспечения, что инвариант сохраняется. Невиртуальная интерфейсная идиома является хорошим примером этого: http://www.gotw.ca/publications/mill18.htm

В-третьих, наследование не часто необходимо, особенно не в C++. Шаблоны и универсальное программирование (статический полиморфизм) могут во многих случаях сделать лучшее задание, чем наследование (полиморфизм во время выполнения). Да, Вам иногда все еще нужны виртуальные методы и наследование, но это - конечно, не значение по умолчанию. Если это, Вы Делаете Его Неправильно. Работа с языком, вместо того, чтобы попытаться симулировать его была чем-то еще. Это не Java, и в отличие от Java, в C++, наследование является исключением, не правилом.

12
задан halfer 28 July 2018 в 23:33
поделиться

3 ответа

Вы можете использовать библиотеку WinHTTP. Здесь - пример асинхронного завершения.

7
ответ дан 2 December 2019 в 06:26
поделиться

Window HTTP Services "предоставляет разработчикам HTTP интерфейс программирования клиентских приложений (API) для отправки запросов по протоколу HTTP на другие серверы HTTP. "

API сервера HTTP " позволяет приложениям взаимодействовать по протоколу HTTP без использования Microsoft Internet Information Server (IIS) »

11
ответ дан 2 December 2019 в 06:26
поделиться

Boost Asio - прекрасная синхронная / асинхронная библиотека, в которой есть все необходимое для HTTP-серверов / клиентов. В нем есть несколько обширных примеров на HTTP-серверах и соответствующих клиентах. Теперь, если вы новичок в C ++ в целом, эта библиотека может быть немного загадочной. Вы всегда можете пойти взглянуть на MSDN, если вам нужен подход «с нуля».

2
ответ дан 2 December 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: