2 f5207500 f5207500 于 2013.01.22 10:53 提问

在想能不能把c++命名空间的名称开成数组型
c++

最近比较困扰一个问题 就是在能不能把命名空间的名字开成数组型
比如说我定义了两个命名空间 namespace solar0 和 namespace solar1
然后在一个函数中使用 比如说在函数 void system(int k) 中选择性使用

比如

void system(int k)
{
    if(k==0) using namespace solar0;
    if(k==1) using namespace solar1;
    .........
}

但是我一旦用if 编译器就给我报错 说下面的对象未定义(下面的对象我在命名空间里定义了)
然后我就想啊,能不能把solar开成数组 变成solar[2] 就是不会搞
比如

void system(int k)
{
    using namespace solar[k];
    .........
}

再一次失败..

而且我也不知道 这个名字solar是一个什么类型,指针也没法指
有考虑过用 #define solar(k) solar##k 结果编译的时候变成solark了
不是想要的:当k=0时候出现solar0
于是就纠结了....
各位大侠们求帮助啊.... 小弟在读高三..

5个回答

Paron717
Paron717   2013.01.22 12:58
已采纳
#include <iostream>
namespace myspace1
{
    int bj=15;
}
namespace myspace2
{
    int i=20;
}
#define paster( n ) using namespace myspace##n

int main()
{
        paster( 1 );
        std::cout<<bj<<std::endl;
    return 0;
}

我在VS2010上可以运行啊...

但是不知道你为什么你要以这种方式用命名空间...很容易混淆的...然后就空间污染了...

Paron717
Paron717 你这样整,想达到什么效果呀?或者说这部分在你的程序中是个什么作用?
接近 5 年之前 回复
f5207500
f5207500 可能是我没说清楚吧 就比如说你那个程序 我想在里面开个函数 比如viod rp(k) {paster(k);} 就是想根据传进来的参数k来决定声明哪一个命名空间,就是想这样 然后不行才求助的
接近 5 年之前 回复
yuan8222
yuan8222   2013.01.22 15:57

我感觉直接用宏定义就可以了.可以这么定义:

#DEFINE XXX
#IFDEFINE XXX
using namespace space1
#ELSE
using namespace space2
#ENDIF
f5207500
f5207500 您的这个解决方案不够动态啊,我希望的是比如在一个函数中比如 viod rp(int k) {if(k==0) using namespace space0;if (k==1)using namespace space1;}想要这样的效果,可是这样编译就会出现我上述的问题了
接近 5 年之前 回复
jiangsheng
jiangsheng   Rxr 2014.11.12 01:45

namespace是在编译的时候用来确定标识符全名的,无法在运行时更改。
你的需求可以用类场模式来实现。

xy707707
xy707707   2015.05.21 15:57

试试条件编译,,看看怎么样

John_ToString
John_ToString   2015.12.05 11:23

这个问题条件编译是解决不了本质的,支持一楼

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!