有这个代码:
auto sym_draw = [&](u32 ch)
{
//...
};
u32string tmp;
utf8::utf8to32(text.begin(), text.end(), back_inserter(tmp));
for (auto ch : tmp)
{
sym_draw(ch);
}
一切都会好的,但不需要 tmp 行,只需要字符本身。
如何从 std 替换插入器,以便字符直接进入 lambda?
有这个代码:
auto sym_draw = [&](u32 ch)
{
//...
};
u32string tmp;
utf8::utf8to32(text.begin(), text.end(), back_inserter(tmp));
for (auto ch : tmp)
{
sym_draw(ch);
}
一切都会好的,但不需要 tmp 行,只需要字符本身。
如何从 std 替换插入器,以便字符直接进入 lambda?
好吧,尝试制作自己的简单迭代器。我不想下载和安装
utf8
,所以我使用通常的示例copy
,好吗?像这样的东西 - 能够接收一个值并将其传递给函子的东西(你有 - get
u32
和 passsym_draw
):您可以在这里完整观看:https ://rextester.com/NRLPB23442
模板很容易,但你需要写更多...... :(
如果您弄清楚它是如何工作
utf8::utf8to32
的,则可以使用以下方法将其替换为迭代utf8::next
:您可以编写一个迭代器来输出值。稍微复杂一点,但对于热身,你可以这样做:
两种选择都有其优点和缺点。第一个更简单,更紧凑。第二个更通用:它可以与任何接受的算法一起使用,例如
back_inserter
.