প্রায়শই, একসাথে একাধিক গণিত প্রকারের প্রয়োজন হয়। কখনও কখনও, একটির নাম সংঘর্ষ হয়। এর দুটি সমাধান মাথায় আসে: একটি নেমস্পেস ব্যবহার করুন বা 'বৃহত্তর' এনাম উপাদানগুলির নাম ব্যবহার করুন। তবুও, নেমস্পেসের সমাধানটিতে দুটি সম্ভাব্য বাস্তবায়ন রয়েছে: নেস্টেড এনাম সহ একটি ডামি ক্লাস, বা একটি পূর্ণ ব্লোন্ড নেমস্পেস।
আমি তিনটি পদ্ধতিরই পক্ষে ভাল এবং সন্ধান করছি।
উদাহরণ:
// oft seen hand-crafted name clash solution
enum eColors { cRed, cColorBlue, cGreen, cYellow, cColorsEnd };
enum eFeelings { cAngry, cFeelingBlue, cHappy, cFeelingsEnd };
void setPenColor( const eColors c ) {
switch (c) {
default: assert(false);
break; case cRed: //...
break; case cColorBlue: //...
//...
}
}
// (ab)using a class as a namespace
class Colors { enum e { cRed, cBlue, cGreen, cYellow, cEnd }; };
class Feelings { enum e { cAngry, cBlue, cHappy, cEnd }; };
void setPenColor( const Colors::e c ) {
switch (c) {
default: assert(false);
break; case Colors::cRed: //...
break; case Colors::cBlue: //...
//...
}
}
// a real namespace?
namespace Colors { enum e { cRed, cBlue, cGreen, cYellow, cEnd }; };
namespace Feelings { enum e { cAngry, cBlue, cHappy, cEnd }; };
void setPenColor( const Colors::e c ) {
switch (c) {
default: assert(false);
break; case Colors::cRed: //...
break; case Colors::cBlue: //...
//...
}
}
enum e {...}
, এনামগুলি বেনামে থাকতে পারে, অর্থাত্ enum {...}
যা নেমস্পেসে বা ক্লাসে আবৃত হওয়ার পরে আরও বেশি বোঝা যায়।