命名空间的规则

本文介绍了C++中的命名空间机制,旨在解决代码中标识符重名的问题,特别是在多人协作和库的开发中。通过示例展示了如何声明和使用命名空间,包括如何访问子命名空间,以及如何通过`using`指令来控制命名空间的可见性。同时,还讨论了如何通过头文件和源文件来组织包含命名空间的代码。

命名空间

//命名空间

//1.命名空间是用来组织和重用代码的编译单元
//2.在编写代码时写的程序不可能所有的标识符都没有重名现象
//在很多人协同开发时更加不可控制,尤其对于库来说问题更加严重、。
//为了解重名现象,通过命名空间来避免冲突


#include<iostream>
//using namespace std;
//封装  命名空间里面的东西默认时对外时不开放的
//namespace YIMU
//{
//	int sum = 10;
//	void fun1()
//	{
//		cout << "hello world!" << endl;
//	}
//	void fun2()
//	{
//		cout << sum << endl;
//	}
//	namespace A
//	{
//		void fun3()
//		{
//			cout << "adsf" << endl;
//		}
//	}
//}
//using namespace YIMU;//把命名空间中的所有成员对外公开

//把YIMU命名空间下的fun2对外开放
//using YIMU::fun2;//::理解为哪个空间下的什么


//using namespace YIMU::A;//只打开了A 而不是A和YIMU都打开了

#include"tool.h"
using namespace AAAAAA;
int main()
{
	//fun1();
	//fun2();
	//cout << sum << endl;
	//fun3();

	//YIMU::A::fun3();//打开YIMU下面的A中的fun3();

	fun();
	system("pause");
}


//头文件tool.h
#pragma once
#include<iostream>
using namespace std;
namespace AAAAAA
{
	void fun();//函数的声明
}

//与头文件同名的文件tool.cpp
#include"tool.h"

//函数体
void AAAAAA::fun()
{
	cout << "qwer" << endl;
}


### Django 中命名空间的使用规则 在大型项目中,不同应用可能具有相似的 URL 模式名称,这可能导致冲突。为了防止这种情况发生,Django 提供了命名空间功能来区分各个应用内的 URL 名称[^1]。 #### 定义应用级别的命名空间 要在应用级别定义命名空间,在 `urls.py` 文件内设置 `app_name` 变量指定该应用的名字作为默认命名空间: ```python # blog/urls.py from django.urls import path from . import views app_name = 'blog' # 应用级命名空间声明 urlpatterns = [ path('', views.blog_index, name='blog_index'), path('post/<int:post_id>/', views.post_detail, name='post_detail') ] ``` 上述代码片段展示了如何通过设定 `app_name` 来创建名为 `'blog'` 的命名空间,并为路径指定了具体名字以便于反向解析时调用[^2]。 #### 在全局 URLs 中引入带命名空间的应用 URLs 当在一个更大的项目上下文中包含这些带有命名空间的应用时,则需利用 `include()` 函数并传递相应的命名空间参数给它: ```python # project/urls.py from django.contrib import admin from django.urls import include, path urlpatterns = [ path('admin/', admin.site.urls), path('blog/', include(('blog.urls', 'blog'), namespace='blog')) ] ``` 这里不仅包含了来自博客模块 (`blog`) 的所有路由配置,还为其分配了一个唯一的命名空间标签——同样叫做 `"blog"` 。这样即使其他地方也有相同名称(`name`)的路由也不会造成混淆[^3]。 #### 访问带命名空间的视图 一旦设置了命名空间之后,在模板或其他 Python 代码里可以通过 `{% url %}` 或者 `reverse()` 方法访问特定命名空间下的视图。例如想要链接到上面提到的文章详情页(post detail),可以这样做: ```html <!-- HTML Template --> <a href="{% url 'blog:post_detail' post.id %}">View Post</a> ``` 或者是在Python代码里面: ```python from django.urls import reverse url = reverse('blog:post_detail', args=[post.id]) print(url) ``` 这种方式确保无论有多少个同名但属于不同命名空间之下的视图都能被正确无误地区分开来[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彭就是我的姓i

你的鼓励是我创作的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值