Лучший тип контента для обслуживания JSONP?

Документированный интерфейс не поддерживает это.

Однако, если вы знаете, что никто не расширяет boost::optional, я считаю, что это может быть технически обоснованным:

template
void emplace_replace( boost::optional& target, Us&&... us ) {
  target.~boost::optional();
  try {
    new (&target) boost::optional( boost::in_place( std::forward(us)...) );
  } catch(...) {
    new (&target) boost::optional();
    throw;
  }
}

мы уничтожаем target, а затем реконструируем новый boost::optional на своем месте с построением на месте. Конструкция try - catch должна быть большей throw s во время строительства безопасной: если она выбрасывается, вы получаете пустую optional.

Это, естественно, ведет себя иначе, чем operator= Ожидается.


В 1.55 (и, возможно, раньше?) есть недокументированный operator=, который принимает Expr, который поддерживает boost::in_place и boost::in_place. См. Ответ @ sharth для подробного использования.

Мое быстрое чтение указывает, что набранная фабрика inplace с помощью этого метода может иметь недостаточную защиту:

boost::optional test;
// test = boost::in_place( 3 ); // <-- very dangerous
test = boost::in_place( 3 ); // safe
test = boost::in_place( 3.0 ); // safe

Если тип передается непосредственно in_place, он может генерировать typed_in_place_factory, которые являются опасными (они делают переданный тип и не проверяют его совместимость). Поэтому не передавайте никакие типы в boost::in_place.

Это (от чтения источника) делает что-то похожее на мой код destroy / restore, за исключением того, что он делает это без разрушения всего optional и просто разрушает сохраненные данные и делают его неинициализированным.


В boost 1.56b1 в boost::optional добавлено emplace . Он делает что-то похожее на обе вышеупомянутые операции. (через @AkiraTakahashi)


std::optional предложения, которые я видел, включили функцию-член .emplace( Us&&... ), которая поддерживает замену emplace напрямую.

119
задан Zach 21 September 2008 в 16:04
поделиться

2 ответа

Используйте приложение/JavaScript. Таким образом клиенты могут полагаться на тип контента, не имея необходимость вручную проверять, имеет ли ответ дополнение или нет.

145
ответ дан kiamlaluno 22 September 2008 в 03:04
поделиться

Используйте application/json согласно rfc4627.txt , если то, что Вы возвращаете, является простым JSON.

при возврате JavaScript (который является действительно, что JSONP), затем используйте application/javascript согласно rfc4329.txt

121
ответ дан Brad 22 September 2008 в 03:04
поделиться
Другие вопросы по тегам:

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