Re: Instantiate a basic_string with a text value independent of char
or wchar_t
On 6/18/2013 5:33 PM, Ryan wrote:
I have a template method that extracts the file name from a string.
The string can either be a char or wchar_t type. I would like to define
the value "/\\" as the constructor value of my basic_string<T>. I'm
currently having to define the value "/\\" as a basic_string<char> and
using its iterators as an input for the basic_string<T>. Is it possible
to use "/\\" value directly in the basic_string<T>?
Ryan
Not sure what you're asking, would that work:
template<class T> basic_string<T> getPattern();
template<> basic_string<char> getPattern<char>()
{
return "/\\";
}
template<> basic_string<wchar_t> getPattern<wchar_t>()
{
return L"/\\";
}
, and then use the one based on the T type:
...
.find_last_of(getPattern<T>())
in your 'getFileName'? The proper one should be picked up. Or you
could simply overload it based on the 'T' itself:
basic_string<char> getPattern(char) { return "/\\"; }
basic_string<wchar_t> getPattern(wchar_t) { return L"/\\"; }
and use
.find_last_of(getPattern(T(0)))
?
#include <string>
#include <iostream>
template<typename T>
std::basic_string<T> getFileName(
std::basic_string<T> const& pathAndFileName) {
std::basic_string<char> pattern("/\\");
return pathAndFileName.substr(
pathAndFileName.find_last_of(
std::basic_string<T>(pattern.begin(), pattern.end())) + 1);
}
int main(int, char const *[]) {
std::basic_string<char> string1("sub\\directory\\file.txt");
std::string result1 = getFileName(string1);
std::cout << result1 << std::endl;
std::basic_string<wchar_t> string2(L"sub\\directory\\file.txt");
std::basic_string<wchar_t> result2 = getFileName(string2);
std::wcout << result2 << std::endl;
return 0;
}
--
I do not respond to top-posted replies, please don't ask