سؤال

لنفترض لدي

 template< unsigned int num >
 class SomeFunctionality
 {
     static unsigned int DoSomething()
     {
         //...
     }

     static void DoSomethingElse()
     {
     }
 };

 typedef SomeFunctionality<6> SomeFunctionalityFor6;

وغويا، "SomeFunctionalityFor6" هو أساسا مساحة محددة لحجة القالب، 6. حتى في التعليمات البرمجية باستخدام هذا المثال من القالب بدلا من القيام

 int main()
 {
       SomeFunctionalityFor6::DoSomething();
 }

وأنا أفضل أن يكون لديك القدرة على استخدام "باستخدام" بيان علاء مساحة اسم الحقيقي

 int main()
 {
       using SomeFunctionalityFor6;
       DoSomething();
 }

وهذا، كما أود أن يشك لا يعمل. استوديو البصرية يشكو أنه يريد مساحة محددة من قبل الكلمة "مساحة" بعد أي بيان تستخدمه.

وهناك على أية حال أن تفعل ما أحاول القيام به؟ أساسا أنا فقط لا أريد أن التأهل تماما في كل مساحة أسميه أساليب ثابتة. أنا أعرف السكر في الغالب مجرد النحوي، ولكن في رأيي أنه يمكن جعل رمز أكثر من ذلك بكثير للقراءة. أنا أتساءل إذا كان هناك حتى طرق لtemplatize مساحة اسم مباشرة بدلا من الحاجة إلى استخدام "الطبقة" الكلمة.

هل كانت مفيدة؟

المحلول

وأنت لا تستطيع أن تفعل ذلك. لا مساحة templatized، ولا باستخدام CLASS_NAME.

وتستمد الأماكن الوحيدة في التعليمات البرمجية التي يمكن استخدام وظائف ثابتة من فئة دون قيد أو شرط الطبقات.

في قضيتك، وأود أن استخدام الرموز المميزة ل typedef لبعض الاسم القصير، مثل

int main()
{
       typedef SomeFunctionalityFor6 SF6;
       SF6::DoSomething();
}

نصائح أخرى

وأو هل يمكن أن مجرد إنشاء كائن محلي ...

int main()
{
  SomeFunctionalityFor6  SF6;
  SF6.DoSomething();
}

هل يمكن استبدال / تغيير SF6 الكائن في الإرادة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top