[ Nedeljko @ 24.06.2011. 10:45 ] @
Navešću uprošćeni primer koji ilustruje ono što ja hoću. Ovakav kod neće da se kompajlira: Code: #include <iostream> using namespace std; template<typename T, bool onScreen> class Pi { public: static T lo() { return 3.1415926535897932383L; } static T up() { return 3.1415926535897932385L; } static T eps() { T result = up() - lo(); if (onScreen) { cout << result << endl; } return result; } }; template<bool onScreen> float Pi<float, onScreen>::lo() { return 3.1415925f; } template<bool onScreen> float Pi<float, onScreen>::up() { return 3.1415927f; } template<bool onScreen> double Pi<double, onScreen>::lo() { return 3.1415926535897931; } template<bool onScreen> double Pi<double, onScreen>::up() { return 3.1415926535897935; } int main() { Pi<double, true>::eps(); return 0; } Kako napisati pa da može? Evo šta se uspešno kompajlira: Code: #include <iostream> using namespace std; template<typename T, bool onScreen> class Pi { public: static T lo() { return 3.1415926535897932383L; } static T up() { return 3.1415926535897932385L; } static T eps() { T result = up() - lo(); if (onScreen) { cout << result << endl; } return result; } }; template<> float Pi<float, true>::lo() { return 3.1415925f; } template<> float Pi<float, false>::lo() { return 3.1415925f; } template<> float Pi<float, true>::up() { return 3.1415927f; } template<> float Pi<float, false>::up() { return 3.1415927f; } template<> double Pi<double, true>::lo() { return 3.1415926535897931; } template<> double Pi<double, false>::lo() { return 3.1415926535897931; } template<> double Pi<double, true>::up() { return 3.1415926535897935; } template<> double Pi<double, false>::up() { return 3.1415926535897935; } int main() { Pi<double, true>::eps(); return 0; } E, sad, šta da drugi parametar nije bio tipa bool, nego npr. int? Ova doskočica ne bi prošla. |