Есть ли какой-либо стандарт C ++ подразумевает, что потоки всегда подписаны или без знака? [Дубликат]

Вопрос был:

Как вернуть ответ от асинхронного вызова?

blockquote>

, который может быть интерпретирован как:

Как сделать синхронный асинхронный код синхронным?

blockquote>

Решение будет состоять в том, чтобы избежать обратных вызовов и использовать комбинацию Promises и async / await.

Я хотел бы привести пример для запроса Ajax.

(Хотя он может быть записан в Javascript, я предпочитаю писать его на Python и компилировать его в Javascript, используя Transcrypt . Это будет достаточно ясно.)

Позволяет сначала включить использование JQuery, чтобы $ был доступен как S:

__pragma__ ('alias', 'S', '$')

Определить функцию, которая возвращает Promise, в этом случае вызов Ajax:

def read(url: str):
    deferred = S.Deferred()
    S.ajax({'type': "POST", 'url': url, 'data': { },
        'success': lambda d: deferred.resolve(d),
        'error': lambda e: deferred.reject(e)
    })
    return deferred.promise()

Использовать асинхронный код, как если бы он был синхронным:

async def readALot():
    try:
        result1 = await read("url_1")
        result2 = await read("url_2")
    except Exception:
        console.warn("Reading a lot failed")

4
задан xmllmx 26 June 2014 в 18:47
поделиться

2 ответа

Из http://en.cppreference.com/w/cpp/io/fpos :

std::streampos является специализацией шаблона класса

template< class State > class fpos;

std::streampos typedef'ed является std::fpos<std::char_traits<char>::state_type>

Каждый объект типа fpos содержит позицию байта в потоке (обычно как частный член типа std::streamoff ).

Из http://en.cppreference.com/w/cpp/io/streamoff :

Тип std::streamoff представляет собой подписанный интегральный тип достаточного размера для представления максимально возможного размера файла, поддерживаемого операционной системой. Как правило, это typedef для long long.

Чтобы ответить на ваши вопросы ...

Вопрос: std::streampos гарантированно unsigned long long?

Ответ. Я уверен, что вы хотели узнать, гарантирован ли тип базового интеграла, который удерживает позицию, unsigned long long. В этом смысле реальный вопрос заключается в том, является ли std::streamoff гарантированным unsigned long long. Ответ на этот вопрос - «Нет», как вы можете сделать вывод из приведенных выше описаний.

Вопрос. Если это не так, как std::istream::seekg работает правильно в файлах размером больше 4G?

Ответ. Если операционная система поддерживает работу с файлами размером более 4G, это std::streamoff соответствует typdef'ed. Даже тогда, скорее всего, это будет подписанный интегральный тип. Вот еще цитата из http://en.cppreference.com/w/cpp/io/streamoff .

Значение std :: streamoff -1 также используемый для представления условий ошибки некоторыми функциями библиотеки ввода / вывода.

7
ответ дан R Sahu 28 August 2018 в 03:35
поделиться

Нет, это не гарантировано unsigned long long.

. Особенно со старыми компиляторами он может не работать с файлами размером более 4 ГБ (и в нескольких случаях он был подписан, поэтому он работал только с файлами до 2 ГБ, но когда типичные жесткие диски составляли от 20 до 40 мегабайт, это, вероятно, не показалось серьезным соображением).

4
ответ дан Jerry Coffin 28 August 2018 в 03:35
поделиться
Другие вопросы по тегам:

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