std::codecvt<InternT,ExternT,StateT>:: length, do_length
|
Определено в заголовке
<locale>
|
||
|
public
:
int
length
(
StateT
&
state,
const
ExternT
*
from,
const
ExternT
*
from_end,
|
(1) | |
|
protected
:
virtual
int
do_length
(
StateT
&
state,
const
ExternT
*
from,
const
ExternT
*
from_end,
|
(2) | |
do_length
наиболее производного класса.
ExternT
из массива символов, определённого
[
from
,
from_end
)
, с заданным начальным состоянием преобразования
state
, в не более чем
max
InternT
символов, и возвращает количество символов
ExternT
, которые будут потреблены при таком преобразовании. Изменяет
state
как при выполнении
do_in
(
state, from, from_end, from, to, to
+
max, to
)
для некоторого воображаемого выходного буфера
[
to
,
to
+
max
)
.
Содержание |
Возвращаемое значение
Количество символов
ExternT
, которое было бы потреблено при преобразовании с помощью
do_in()
до тех пор, пока либо все
from_end
-
from
символы не будут потреблены, либо
max
InternT
символов не будет произведено, либо не произойдет ошибка преобразования.
Неконвертирующая специализация std:: codecvt < char , char , std:: mbstate_t > возвращает std:: min ( max, from_end - from ) .
Пример
#include <iostream> #include <locale> #include <string> int main() { using facet_type = std::codecvt<wchar_t, char, std::mbstate_t>; // narrow multibyte encoding std::string s = "z\u00df\u6c34\U0001d10b"; // or u8"zß水𝄋" // or "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b" std::locale loc("en_US.UTF-8"); facet_type const& codecvt_facet = std::use_facet<facet_type>(loc); std::mbstate_t mb = std::mbstate_t(); std::cout << "Only the first " << codecvt_facet.length(mb, s.data(), s.data() + s.size(), 2) << " bytes out of " << s.size() << " would be consumed" " to produce the first 2 characters\n"; }
Вывод:
Only the first 3 bytes out of 10 would be consumed to produce the first 2 characters
Отчёты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение в опубликованной версии | Корректное поведение |
|---|---|---|---|
| LWG 75 | C++98 | влияние на state не было указано | указано |
| LWG 305 | C++98 |
std::codecvt<wchar_t, char, std::mbstate_t>::do_length
требовалось возвращать std:: min ( max, from_end - from ) |
не требуется |
Смотрите также
|
[virtual]
|
преобразует строку из
ExternT
в
InternT
, например, при чтении из файла
(виртуальная защищенная функция-член) |