Каноническим решением является использование стандартной библиотеки C ++ для преобразования. В зависимости от требуемого типа возвращаемого значения доступны следующие функции преобразования: std :: stoi, std :: stol или std :: stoll (или их беззнаковые аналоги std :: stoul, std: :. stoull )
Реализация довольно проста:
int ToInt( const CString& str ) {
return std::stoi( { str.GetString(), static_cast<size_t>( str.GetLength() ) } );
}
long ToLong( const CString& str ) {
return std::stol( { str.GetString(), static_cast<size_t>( str.GetLength() ) } );
}
long long ToLongLong( const CString& str ) {
return std::stoll( { str.GetString(), static_cast<size_t>( str.GetLength() ) } );
}
unsigned long ToULong( const CString& str ) {
return std::stoul( { str.GetString(), static_cast<size_t>( str.GetLength() ) } );
}
unsigned long long ToULongLong( const CString& str ) {
return std::stoull( { str.GetString(), static_cast<size_t>( str.GetLength() ) } );
}
Все эти реализации сообщают об ошибках через исключения ( std :: invalid_argument , если преобразование не может быть выполнено, std :: out_of_range , если преобразованное значение выпадает из диапазона тип результата). Построение временного std::[w]string
можно также скинуть.
Реализации могут использоваться как для Unicode, так и для проектов MBCS.