C-стиль восходящее и удрученное включающее частное наследование

Я вижу 2 возможных решения для достижения этой цели на стороне клиента:

  1. Используйте панель блокировки запросов из ящика (откройте Chrome DevTools -> Esc -> '.. . '-> Блокировка запросов enter image description here Это полностью готовое решение для большинства случаев автономного использования.

  2. [ 1111] Использование работника сервиса. По сути, это способ прокси-запросов и индивидуального ответа (например, ответом 500). Возможно, вы захотите включить / отключить такую ​​функцию отладки с помощью фрагментов Chrome Devtools (Open Chrome DevTools -> Sources -> Snippets), так как вы не хотите, чтобы ваши запросы постоянно терпели неудачу:)

Сначала вам нужно зарегистрировать ваш сервисный работник следующим образом:

if('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/path-to-service-worker.js').then(function(registration) {
    // registration successful
  }).catch(function(err) {
    // registration failed
  });
}

После этого перезагрузите браузер (или установите ваш сервисный работник в DevTools -> Приложение -> Сервисные работники), чтобы ваш service-worker.js был активным, мог прослушивать событие «fetch» ​​и прокси-запросы для этого Домен, как это:

self.addEventListener('fetch', function(event) {
  // this will set a breakpoint in chrome devtools, allowing you to manually edit the response
  debugger; 
  // alternatively you could reponse with an error response like this:
  event.respondWith(
    new Response(null, {
      status: 500
    })
  );
});

Сторона примечание: из-за ограничений безопасности в браузере сервис-работники работают только через https и localhost.

Дополнительная информация: https://developer.mozilla.org/en-US/docs/Web/API/Response/Response https://developers.google.com/web/ Основы / праймеры / сервис-рабочие /

6
задан Abhay 10 May 2009 в 06:18
поделиться

4 ответа

The C++ casts are enforced by the compiler (not the linker). It's not that private inheritance causes a different class layout; it's that the compiler will forbid you from casting a pointer to a derived class to a pointer to its base class if the inheritance is not public, based on the declaration of the class.

0
ответ дан 17 December 2019 в 20:34
поделиться

Стандарт заявляет в 5.4.7, что приведение типов в C может на самом деле больше, чем может сделать любая последовательность преобразований нового стиля - в частности, включая приведение из указателя -to-производный от указателя на базу, даже когда базовый класс недоступен, что именно происходит здесь с частным наследованием. (Почему это должно быть разрешено и, в частности, почему это должно быть разрешено только для приведения типов в стиле C, совершенно вне меня; но это, несомненно, разрешено.)

Итак, dribeas прав, компиляторы обязаны обрабатывать C- правильное преобразование указателя стиля, даже если B наследуется от нескольких базовых классов. Мое собственное тестирование с MSVC ++ 8 и MinGW подтверждает его результаты на практике - когда B наследуется от нескольких базовых классов,

7
ответ дан 17 December 2019 в 20:34
поделиться

Существующие ответы прекрасны, но одна информация, которую вы можете найти полезной, относится к этому:

Приведения в стиле C - это просто битовая игра

Если вы используете старую- приведение стиля между двумя типами указателей, компилятору обычно не нужно возиться с какими-либо битами. Вы сообщаете компилятору, что хотите обрабатывать область памяти, как если бы она содержала некоторый тип (потому что вы знаете, что это действительно так), поэтому компилятор вообще ничего не делает во время выполнения для изменения содержимого памяти. Приведение просто отключает безопасность типов во время компиляции.

-1
ответ дан 17 December 2019 в 20:34
поделиться

If C-style casts are just bit-fiddling, how are C++ casts implemented i.e. how do they know the type of inheritance from memory footprint?

C-style casts in C++ mean more than meets the eye. They are technically the only way to ask the compiler to choose the right cast operator required for conversion. For the same reason, this is better than using reinterpret_cast. The latter is implementation defined.

It seems there is a lot of confusion around C-style casts. Remember, no tool is safe until you know how to use it. The same applies to the C-style cast. The point of having a C-style cast is to ask the compiler to choose the safest and most portable conversion for a given pair of types. This may trigger a change from static_cast to reinterpret_cast silently and introduce errors. The point is: you need to know what you are doing.

-4
ответ дан 17 December 2019 в 20:34
поделиться
Другие вопросы по тегам:

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