C++ C++;按任何模式将任何字符串类型拆分(解析)为用户指定的参数

C++ C++;按任何模式将任何字符串类型拆分(解析)为用户指定的参数,c++,c++11,templates,unicode,stl,C++,C++11,Templates,Unicode,Stl,有没有一种方法可以编写通用算法,使用用户提供的参数列表和用户定义的模式来解析用户定义类型的字符串? 示例代码: template <typename CharT, typename ...Args> bool parse_string_to_args(std::basic_string<CharT> string, const CharT* pattern, Args&&... args) {

有没有一种方法可以编写通用算法,使用用户提供的参数列表和用户定义的模式来解析用户定义类型的字符串? 示例代码:

template <typename CharT, typename ...Args> 
bool parse_string_to_args(std::basic_string<CharT> string,
                          const CharT* pattern, Args&&... args)
{
    // for char: I'd use sscanf
    auto ret = sscanf(string.c_str(), pattern, &args...);
    if (ret == std::char_traits<char>::eof())
        return false;
    return true;
    // for wchar: swscanf ...
}
模板
bool parse_string_to_args(std::basic_string,
常量图表*模式,参数&&…参数)
{
//对于char:我会使用sscanf
auto-ret=sscanf(string.c_str()、pattern和args…);
如果(ret==std::char\u traits::eof())
返回false;
返回true;
//对于wchar:swscanf。。。
}
当然,示例代码非常糟糕。如果C++有一个……/p>,我需要一个基于C++的标准库的SCASNF模板。
  • 如果1。这几乎是不可能的,有没有一种国际性的方法来处理任何字符(我知道Unicode)?C++11
    utf-8
    utf-16
    能保证什么吗
    wchar\u t
    似乎并不总是解析符号,所以我宁愿不使用它


  • 注意:如果有跨平台的方法(基本上是标准库),那就太好了。Linux是最高优先级。

    标题
    提供与
    utf8
    utf16
    之间的转换。其中一些可以输入您的
    ,以满足您的需要。也是第一个片段: STD::Basic StrugStuts,除了不能使用<代码> const图表*模式< /代码>,因为C++试图摆脱这种不安全的方法。我知道
    。我还找到了一些关于
    std::basic_stringstream
    (在我的例子中,甚至是
    istringstream
    )的答案。这与问题2密切相关一些国际类型(我想,类似unicode)可以解决这个问题,然后我可以在必要时安全地使用
    。这在某种程度上是对那里不安全的遗憾。与
    std::basic_stringstream
    方法相比,它将允许更大的灵活性。我想知道,我是否可以用regexp做些什么……我不确定这对于任意用户定义的类型应该如何工作。您需要知道至少一些字符在
    图表中是如何表示的
    ;e、 g.你怎么知道一个两元素的
    模式
    以某种方式表示
    “%d”
    ,而一个两元素的
    字符串
    表示
    “42”
    ?至少,您需要一个同义词来表示
    '\0'
    ,因为您没有为
    模式
    @IgorTandetnik传递长度。我希望用户知道如何根据图表正确定义模式和字符串。例如,如果
    CharT=wchar\u t
    pattern=L“%lc”
    -查找单个字符(如果这是您的意思)。感谢您对“0”的评论,我认为我应该考虑长度< <代码>模式< /代码>。如果我可以的话,我想远离任何关于模式的知识:只需把数据传递给sSCANF的某种通用的替代品,不必理会——让C++做所有的工作。您没有要求只为<代码> char < /> >和<代码> W查尔特特< /代码>的函数。(这很容易处理-只需分派到
    sscanf
    swscanf
    )。您要求的函数可以处理任意用户定义类型的序列。假设我有
    struct-Weird{char getChar()const;/*其他成员*/};
    并声明
    Weird
    的每个实例都表示
    getChar()的字符
    返回。
    parse_string_to_args
    是否需要处理这些问题?您需要在
    图表上提出一些要求,才能使问题陈述有意义-这些要求是什么?您试图解决什么问题?