怎样获取当前运行在哪个namespace?

红烧鱼 2008-03-14 04:54:32
namespace,相信大家都知道。

namespace Soochow
{
//A
...
namespace University
{
//B
...
namespace ComputerScience
{
//C
...
}
}
}

我的问题是,当运行到A处,怎样得知A处于Soochow这个名字空间里面,同理,在B处,怎样知道现在到了University这个名字空间了。The same to C!
要求是获取运行处属于的最低层namespace。比如,在C处,ComeputerScience嵌套于University和Soochow,我要取得的namespace值是ComputerScience,而不是University或Soochow。
...全文
347 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Vitin 2008-03-14
  • 打赏
  • 举报
回复
呵呵,感谢楼上热心实验。

如楼上所示,6楼的方案有一个缺陷:不能同时使用using-directive,这会造成歧义。
如你所见,当使用using-directive时,访问NAMESPACE_NAME本身就是有歧义的,你希望它返回哪个值呢?
所以语言在此时的行为是恰当的,它提醒使用者用更细致的设计去处理这种情况,以告诉编译器此时应采取何种策略。

虽然我知道这一点,不过没有在6楼解释,是我的疏忽。谢谢楼上了。
taodm 2008-03-14
  • 打赏
  • 举报
回复
#include <cstdlib>
#include <iostream>
卫亭没编译过自己的代码吧
#include <string>
using namespace std;

const std::string NAMESPACE_NAME = "Global";
namespace Soochow
{
//A
const std::string NAMESPACE_NAME = "Soochow";

}

using namespace Soochow;
int main(int argc, char *argv[])
{
cout << NAMESPACE_NAME;
system("PAUSE");
return EXIT_SUCCESS;
}
MagiSu 2008-03-14
  • 打赏
  • 举报
回复
这个,是设计的问题吧?
红烧鱼 2008-03-14
  • 打赏
  • 举报
回复
谢谢各位的答案。
你们提供的解决方案,我都想到过的,可惜效果不佳。


不过,还是很感谢。
mymtom 2008-03-14
  • 打赏
  • 举报
回复
名字空间实在编译的时候才有意义吧.
实在不知道楼主到底想文什么.

//
// File: NameSpace.cpp
// Date: 2008-03-14
// By: mymtom
//

namespace China
{

class A
{
public:
A();
};
namespace University
{
class B
{
public:
B();
};
namespace ComputerScience
{
class C
{
public:
C();
};
}
}
}

using namespace China;
using namespace University;
using namespace ComputerScience;

#include <iostream>
using namespace std;

A::A()
{
cout << __PRETTY_FUNCTION__ << endl;
}


B::B()
{
cout << __PRETTY_FUNCTION__ << endl;
}

C::C()
{
cout << __PRETTY_FUNCTION__ << endl;
}

int
main(void)
{
A a;
B b;
C c;

return (0);
}
Vitin 2008-03-14
  • 打赏
  • 举报
回复
在每个名字空间里定义一个同名常量,如:
[code=C/C++]
const std::string NAMESPACE_NAME = "Global";
namespace Soochow
{
//A
const std::string NAMESPACE_NAME = "Soochow";
namespace University
{
//B
const std::string NAMESPACE_NAME = "University";
namespace ComputerScience
{
//C
const std::string NAMESPACE_NAME = "ComputerScience";
}
}
}
[code]
这样当需要知道当前所属名字空间时,访问NAMESPACE_NAME就可以了。
paidfighting 2008-03-14
  • 打赏
  • 举报
回复
知道它干什么。。。
红烧鱼 2008-03-14
  • 打赏
  • 举报
回复
我要动态的得知,难不成在每个语句处都cout 加 flag?
hastings 2008-03-14
  • 打赏
  • 举报
回复
标记.
直接在哪里就cout哪里的名字?
taodm 2008-03-14
  • 打赏
  • 举报
回复
无解。也不该有这个需求。
guanbenben 2008-03-14
  • 打赏
  • 举报
回复
gettype()?

64,849

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧