اذهب إلى المحتوى

السؤال

نشر

لدي namespace ويحتوي على دالة باسم user_details ولكن لدي دالة أخرى عامة global بنفس الاسم:

std::string user_details()
{
	return "global";
}

namespace user
{
	std::string user_details()
	{
		return "local";
	}

	void execute()
	{
		std::cout << user_details();	// Output: local
	}
}

عندما أقوم بتنفيذ الدالة execute يتم تنفيذ الدالة user_details الموجودة في الـ namespace، كيف أقوم بإستدعاء الدالة العامة الموجودة خارج الـ namespace لكي تكون النتيجة "global"؟

Recommended Posts

  • 1
نشر

عليك أن تستعمل المعامل scope resolution operator ( :: ) والذي يقوم بتحديد مجال الدالة التي تريد إستدعائها، فعندما تستعدي الدالة execute تقوم بتنفيذ الأمر كالتالي:
 

int main()
{
  // namespcae::function()
     user::execute();

	return 0;
}

أي أن الجزء الموجود على اليمين هو اسم الدالة والجزء الموجود على يسار المعامل هو اسم المجال namespace، وفي حالة لم يتم تحديد اسم namespace سوف يتم البحث عن الدالة في المجال العام global scope، كالتالي:
 

void print() {
    std::cout << "hello, world!";
}

int main() {
    ::print();
  
    return 0;
}

بالطبع إستخدام المعامل scope resolution في الكود السابق غير ضروري ولكن في الكود الخاص بك، عليك أن تستخدمه لتشير إلى الدالة الموجودة في النطاق العام global scope:
 

std::string user_details()
{
	return "global";
}

namespace user
{
	std::string user_details()
	{
		return "local";
	}

	void execute()
	{
		std::cout << ::user_details();	// global
	}
}

عند تنفيذ الدالة execute في الكود السابق سوف يتم تنفيذ الدالة الموجودة في المجال العام وسيتم طباعة كلمة global

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...