2016-02-25 67 views
2

我想創建模板函數來解析常規或寬字符串。 事情是這樣的:C++模板和字符串文字

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"

如何解決這個問題?爲窄字符和寬字符創建兩個複製粘貼方法?也許我們有更好的方案?

回答

3

這將需要一點代碼重複,但可以有兩個重載(每個類型的字符串一個),並讓它們都調用一個模板函數,該函數接受字符串和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")); 
} 
+0

它是唯一的解決方案?我陷入了同樣的問題,我不想重複一堆這樣的功能...... – Boiethios