C ++模板和字符串文字
c++ template and string literals
我想创建模板函数来解析常规或宽字符串。
像这样:
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"));
}
我想创建模板函数来解析常规或宽字符串。 像这样:
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"));
}