C++ 模板和字符串文字

Posted

技术标签:

【中文标题】C++ 模板和字符串文字【英文标题】:c++ template and string literals 【发布时间】:2016-06-08 06:59:42 【问题描述】:

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

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"

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

【问题讨论】:

templates and string literals and UNICODE的可能重复 【参考方案1】:

这将需要一些代码重复,但您可以有两个重载(每种类型的字符串一个)并让它们都调用一个模板函数,该函数接受字符串和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++ 模板和字符串文字的主要内容,如果未能解决你的问题,请参考以下文章

字符串文字不允许作为非类型模板参数

在“char 类型”模板化类中使用字符串文字

C++ 多行字符串文字

多行字符串的 JSON 和模板文字

取决于模板类型参数的字符串文字?

字符串文字取决于模板类型参数?