Существует полный набор инструкции по MSDN также. Необходимо считать их хорошо, это и хитро и важно.
Несколько точек я нашел самым полезным:
Типы Значения не имеют Идентификационных данных, таким образом, в struct Point
Вы будете обычно делать, участник участником выдерживает сравнение.
Ссылочные типы обычно имеют идентификационные данные, и поэтому Равняется тесту, обычно останавливается в ReferenceEquals (значение по умолчанию, никакая потребность переопределить). Но существуют исключения, как строка и Ваш class Point2
, где объект не имеет никаких полезных идентификационных данных, и затем Вы переопределяете участников Равенства для обеспечения собственной семантики. В той ситуации следуйте инструкциям для прохода через пустой указатель и случаи другого-типа сначала.
И существуют серьезные основания сохранить GethashCode()
и operator==
в синхронизации также.
std::string NarrowString(const std::wstring& str, const char* localeName = "C")
{
std::string result;
result.resize(str.size());
std::locale loc(localeName);
std::use_facet<std::ctype<wchar_t> >(loc).narrow(
str.c_str(), str.c_str() + str.size(), '?', &*result.begin());
return result;
}
Он должен использовать текущий языковой стандарт для преобразования строки Unicode. Для символов, которые не входят в кодовую страницу, знак "?" caracter используется. Протестировано с Visual C ++ 2005/2008.
В большинстве случаев будет достаточно WideCharToMultiByte ().