> Не понятно где и какую роль играет std::locale? Приведите пожалуйста реализацию конструктора ToUpper(const std::locale&).
std::locale используется для получения std::ctype:
class ToUpper
{
public:
ToUpper(const std::locale& l)
: m_ct (std::use_facet<std::ctype<char> >(l))
{
}
char operator()(char c) const
{
return m_ct.toupper(c);
}
private:
const std::ctype<char>& m_ct;
};
Но здесь есть тонкий момент: facet m_ct будет жить только пока жива locale, из которой он получен. Т.к. периодически могут использоваться временные объекты std::locale и ToUpper может использоваться не в точке создания, то более надежным вариантом будет продление жизни полученной std::locale:
class ToUpper
{
public:
ToUpper(const std::locale& l)
: m_l (l)
, m_ct (std::use_facet<std::ctype<char> >(m_l))
{
}
char operator()(char c) const
{
return m_ct.toupper(c);
}
private:
std::locale m_l;
const std::ctype<char>& m_ct;
};
Posted via RSDN NNTP Server 1.9
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен