For Programmers: Free Programming Magazines  


Home > Archive > VC STL > April 2005 > string to wstring









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author string to wstring
Arsalan Ahmad

2005-04-28, 9:03 pm

Hi,

Is there any function which could convert from string to wstring and any
other for inverse?

Thanks,

Arsalan


Tilman Kuepper

2005-04-29, 9:04 am

Hi Arsalan,

> Is there any function which could convert from string
> to wstring and any other for inverse?


Have a look at narrow(), widen() and locales. You may
want to wrap these functions in a function object like
this...

#include <string>
#include <vector>
#include <locale>
#include <functional>
#include <iostream>

// Put this class in your personal toolbox...
template<class E,
class T = std::char_traits<E>,
class A = std::allocator<E> >

class Widen : public std::unary_function<
const std::string&, std::basic_string<E, T, A> >
{
std::locale loc_;
const std::ctype<E>* pCType_;

// No copy-constructor, no assignment operator...
Widen(const Widen&);
Widen& operator= (const Widen&);

public:
// Constructor...
Widen(const std::locale& loc = std::locale()) : loc_(loc)
{
#if defined(_MSC_VER) && (_MSC_VER < 1300) // VC++ 6.0...
using namespace std;
pCType_ = &_USE(loc, ctype<E> );
#else
pCType_ = &std::use_facet<std::ctype<E> >(loc);
#endif
}

// Conversion...
std::basic_string<E, T, A> operator() (const std::string& str) const
{
typename std::basic_string<E, T, A>::size_type srcLen =
str.length();
const char* pSrcBeg = str.c_str();
std::vector<E> tmp(srcLen);

pCType_->widen(pSrcBeg, pSrcBeg + srcLen, &tmp[0]);
return std::basic_string<E, T, A>(&tmp[0], srcLen);
}
};

// How to use it...
int main()
{
Widen<wchar_t> to_wstring;
std::string s = "my test string";
std::wstring w = to_wstring(s);
std::wcout << w << L"\n";
}

Best regards,
Tilman


Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com