Różne niuanse dot. C++
Jak wiemy, C++ potrafi płatać figle. Szczególnie jeśli naszym środowiskiem jest Visual Studio. Jednakże, poza tym, postanowiłem zebrać kilka przydatnych snipetów, o których nie chciałbym często i gęsto mówić. Zebrałem, będę uzupełniał, tak więc zapiszcie sobie adres do zakładek.
Ciekawe i przydatne rzeczy
Ustawianie precyzji bez względu na typ przekazanej zmiennej
Proszę jednak pamiętać, że funkcja zadziała prawidłowo przy zmiennych typu int, float, double oraz char. Za pozostałe - nie odpowiadam ;)
template <class usertype> usertype set_precision(usertype r, int n) { int a,b,x=0; if ( r == absolute_cast<usertype>(0) ) return absolute_cast<usertype>(0); if ( r < absolute_cast<usertype>(0) ) { x=1; r = r*(-1); } a = absolute_cast<int>(r); r = r-a; r = r*pow(10.0,absolute_cast<double>(n)); b = absolute_cast<int>(r); r = absolute_cast<usertype>(a)+((absolute_cast<usertype>(b))/pow(10.0,absolute_cast<double>(n))); return (x==0)?r:(r*(-1)); }
Użycie:
double dPi = 3.1415; dPi = set_precision(dPi, 2); // dPi => 3.14
Hint: Można przerobić funkcję, by zmienna przekazana była przez referencję. Ale to już inwencja własna.
Visual Studio swoje wie…
Inicjacja zmiennej typu float
float fPi = 3.1415f; // bądź (float)3.1415
Sprawdzanie warunku dla float
if ( fPi < absolute_cast<float>3.1415 ) {} else {}
Użycie funkcji pow z biblioteki cmath
double pow(double, double);
Konwersja z std::String do CString
std::string strStdString ("Brzydkie słowo"); // konstruktor CStringa! CString strCString (strStdString.c_str ());
wersja strony: 3, ostatnia edycja: 10 May 2009 20:29