سؤال

واحدة من تقلبات نظام تطوري (Codegear C ++ بناء) هو أن بعض من رؤوس الذي تم إنشاؤه تلقائيا تصر على وجود ...

using namespace xyzzy

... البيانات في نفوسهم، والتي تؤثر على قانون بلدي عندما كنت ترغب الأقل أو نتوقع ذلك.

هل هناك طريقة يمكنني إلغاء بطريقة أو بأخرى / تجاوز السابق "باستخدام" بيان لتجنب ذلك.

وربما ...

unusing namespace xyzzy;
هل كانت مفيدة؟

المحلول

وكلا. ولكن هناك حل محتمل: إذا كنت أرفق بك تشمل التوجيه في مساحة اسم خاص به، مثل هذا ...

namespace codegear {
    #include "codegear_header.h"
} // namespace codegear

... ثم يتم تحييد آثار أي توجيهات باستخدام ضمن ذلك الرأس.

وهذا قد يكون مشكلة في بعض الحالات. لهذا السبب توصي كل ++ دليل أسلوب C بقوة <م> لا وضع "باستخدام مساحة" التوجيه في ملف الرأس.

نصائح أخرى

لا لا يمكنك <م> و unuse مساحة اسم. الشيء الوحيد الذي يمكنك القيام به هو وضع using namespace-بيان كتلة للحد من انها النطاق.

مثال:

{
    using namespace xyzzy;

} // stop using namespace xyzzy here

وربما يمكنك تغيير القالب الذي يستخدم رؤوس الذي تم إنشاؤه تلقائيا الخاص بك.

قد يكون عالقا باستخدام النطاقات صريحة بشأن الصراعات:

string x; // Doesn't work due to conflicting declarations
::string y; // use the class from the global namespace
std::string z; // use the string class from the std namespace

لتكون مرجعا في المستقبل: منذ النسخة XE هناك قيمة الجديدة التي يمكنك تعريف # لتجنب الباحث using namespace System; اللعين التضمين: DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE

وماذا عن استخدام الحوار الاقتصادي الاستراتيجي، بيرل أو بعض أخرى أداة سطر الأوامر كجزء من عملية الإنشاء لتعديل رؤوس ولدت بعد أنها ولدت ولكن قبل استخدامها؟

وتجربة سريعة مع Visual Studio 2005 تبين أنه يمكنك أرفق تلك الرؤوس في مساحة اسمه الخاصة بك ومن ثم use ما تحتاجه من مساحة الاسم هذا (ولكن لا use مساحة الاسم كله، لأنها سوف يقدم مساحة الاسم الذي تريد إخفاء .

#include<iostream>
#include<stdio.h>
namespace namespace1 {
    int t = 10;
}
namespace namespace2 {
    int t = 20;
}
int main() {
using namespace namespace1;
    printf("%d" , t);
    printf("%d" , namespace2::t);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top