std::cin如何实现向scanf一样的指定输入格式

本来是在ifstream上出现的问题,想读取文件信息且让文件更有可读性,到想到ifstream与cin同是basic_ios的子类,输入方法都不会太大,scanf和fscanf都是cstdio的输入,格式也没有区别,那么就用cin代替ifstream,scanf代替fscanf。
——---——---——---
假设我现在输入了以下内容:

A:1,B:2

如果我用scanf读取A:和B:后面的数据,那么可以直接用:

scanf("A:%d,B:%d",&a,&b);

那么如何用cin做到向scanf一样的效果?
不要使用cin.get(),用最简洁的办法。

#include <iostream>

struct literal
{
    const char *str;
    literal(const char *in) : str(in) {}
};

std::istream &operator>>(std::istream &is, const literal &lit)
{
    for (const char *p = lit.str; *p; ++p)
    {
        if (std::isspace(*p))
            std::istream::sentry s(is); // discard whitespace
        else if (is.get() != *p)
            is.setstate(std::ios::failbit); // stop extracting
    }
    return is;
}

int main()
{
    int a, b;
    if (std::cin >> literal("A:") >> a >> literal(",B:") >> b)
        std::cout << a << ' ' << b << '\n';
    else
        std::cerr << "invalid format\n";
    return 0;
}
$ g++ -Wall main.cpp
$ ./a.out
A:1,B:2
1 2
$ ./a.out
a:1,b:2
invalid format