C++ 模板和字符串文字

标签 c++ regex string templates widechar

我想创建模板函数来解析常规或宽字符串。 像这样的事情:

template <class CharT>
bool parseString(std::basic_string<CharT> str)
{
    boost::basic_regex<CharT> myRegex("my_regex_expression");
    boost::match_results<typename std::basic_string<CharT>::const_iterator> what;

    if (boost::regex_search(str, what, filenameRegex) == false)
    {
        return false;
    }

    ...

    return true;
}

template bool parseString<char>(std::string str);
template bool parseString<wchar_t>(std::wstring str);

此时我遇到了问题,在函数中我有一个预定义的字符串“my_regex_expression”。但对于具有宽字符的模板,我需要一个具有宽字符的字符串 L"my_regex_expression"

如何解决这个问题?为窄字符和宽字符创建两种复制粘贴方法?也许我们有更好的解决方案?

最佳答案

这需要一些代码重复,但您可以有两个重载(每种类型的字符串一个),并让它们都调用一个接受字符串和 basic_regex 的模板函数。这将类似于

template <class String, class Regex>
bool parseString(const String& str, const Regex & reg)
{
    boost::match_results<typename String::const_iterator> what;

    if (boost::regex_search(str, what, reg) == false)
    {
        return false;
    }

    //...

    return true;
}

bool parseString(const std::string& str)
{
    return parseString(str, boost::basic_regex<char> myRegex("my_regex_expression"));
}

bool parseString(const std::wstring& str)
{
    return parseString(str, boost::basic_regex<wchar_t> myRegex(L"my_regex_expression"));
}

关于C++ 模板和字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35628387/

相关文章:

java - 如何计算用户输入中的字符、字母、空格

python - 如何使用正则表达式进行多次替换?

c++ - DLL 注入(inject)有效,除非我在 Qt Creator 中编译它

c++ - 使用函数中的语句数作为常量进行内存分配

Python 正则表达式为最后一个匹配的字符返回额外的捕获组

逻辑标准的正则表达式

Python字符串插值: only show necessary decimal places

c++ - 进程 qmake.exe 退出并显示代码 2 - 第一次使用 Qt 和 Qt Creator

c# - 将 C++ 字符串 vector 编码到 C#

javascript - 与 Kleen 正则表达式的区别